C# 存储为文本的数字表示错误
当我读取一个字段C# 存储为文本的数字表示错误,c#,excel,C#,Excel,当我读取一个字段dt.Rows[0][j]时,我总是得到null,尽管数据在excel工作表中 如何抑制由于数字存储为文本而导致的错误 这是我正在使用的代码 using (SqlConnection con = new SqlConnection(consString)) { con.Open(); for (int i = 2; i < dt.Rows.Count; i++) { for (int j = 1; j < dt.Columns
dt.Rows[0][j]
时,我总是得到null
,尽管数据在excel工作表中
如何抑制由于数字存储为文本而导致的错误
这是我正在使用的代码
using (SqlConnection con = new SqlConnection(consString))
{
con.Open();
for (int i = 2; i < dt.Rows.Count; i++)
{
for (int j = 1; j < dt.Columns.Count; j += 3)
{
try
{
var s3 = sheetName.Remove(sheetName.Length - 1);
s3 = s3.Replace("'", string.Empty);
s3 = s3.Replace("$", string.Empty);
if (s3[0] == '0') { s3 = s3.Remove(0, 1); }
if ((!dt.Rows[0][j].ToString().Contains("total")))
{
SqlCommand command = new SqlCommand("INSERT INTO [Budget]([CA TTC],[VAL MRG TTC],[CA HT],[VAL MRG HT],[Rayon],[Date],[Code Site],[Rayon Correspondance]) VALUES(@ca,@val,@catHT ,@valHT ,@rayon, @date ,@sheetName,null )", con);
command.Parameters.AddWithValue("@date", dt.Rows[i][0]);
command.Parameters.AddWithValue("@ca", dt.Rows[i][j]);
command.Parameters.AddWithValue("@val", dt.Rows[i][j + 1]);
command.Parameters.AddWithValue("@rayon", dt.Rows[0][j].GetType());
MessageBox.Show(dt.Rows[0][j].GetType().ToString());
command.Parameters.AddWithValue("@sheetName", s3);
command.Parameters.Add("@catHT", DBNull.Value).Value = DBNull.Value;
command.Parameters.Add("@valHT", DBNull.Value).Value = DBNull.Value;
command.ExecuteNonQuery();
}
}
我强烈认为您混淆了包含数据的单元格和代码所指向的单元格。请仔细检查单元格
dt.Rows[0][j]
所指的是什么。查看出错时j
的值。这将有助于你缩小到有问题的牢房
如果单元格中包含以文本形式存储的数字,则代码不会在单元格中失败。下面是一个简单的测试方法
创建一个Excel文件并将其另存为sayC:\MyFile.xlsx
。在单元格A2
中,键入'1
。”
将确保号码存储为文本
现在,使用这个代码
private void button1_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection Conn;
Conn = new System.Data.OleDb.OleDbConnection(
"provider=Microsoft.Ace.OLEDB.12.0;Data Source='C:\\MyFile.xlsx';Extended Properties=Excel 12.0 XML;");
var dt = new DataTable();
string query = string.Format("SELECT * FROM [{0}]", "Sheet1$");
Conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, Conn);
adapter.Fill(dt);
MessageBox.Show(dt.Rows[0][0].ToString());
}
您将在消息框中获得1
我坚信您混淆了包含数据的单元格和代码指向的单元格。请仔细检查单元格
dt.Rows[0][j]
所指的是什么。查看出错时j
的值。这将有助于你缩小到有问题的牢房
如果单元格中包含以文本形式存储的数字,则代码不会在单元格中失败。下面是一个简单的测试方法
创建一个Excel文件并将其另存为sayC:\MyFile.xlsx
。在单元格A2
中,键入'1
。”
将确保号码存储为文本
现在,使用这个代码
private void button1_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection Conn;
Conn = new System.Data.OleDb.OleDbConnection(
"provider=Microsoft.Ace.OLEDB.12.0;Data Source='C:\\MyFile.xlsx';Extended Properties=Excel 12.0 XML;");
var dt = new DataTable();
string query = string.Format("SELECT * FROM [{0}]", "Sheet1$");
Conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, Conn);
adapter.Fill(dt);
MessageBox.Show(dt.Rows[0][0].ToString());
}
您将在消息框中获得1
如果您下次想使用@jon skeet的woodoo设置问题格式,请将您的代码粘贴到VS。它将执行所有神奇的格式设置。您如何将Excel数据读入
dt
?@E.Z.Hart我更新我的问题,如果您下次想使用@jon skeet的woodoo设置问题格式,将您的代码粘贴到VS。它将完成所有神奇的格式设置。您如何将Excel数据读入dt
?@E.Z.Hart我更新了我的问题