存储为文本的数字给出错误

时间:2015-09-05 21:00:11

标签: c# excel

当我读取字段dt.Rows[0][j]时,尽管excel表中包含数据,但我总是得到null

如何抑制由于存储为文本的号码而导致的错误?

这是我正在使用的代码。

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();
                }
            }

enter image description here

enter image description here

我使用以下代码

阅读dt
var dt = new DataTable();
string query = string.Format("SELECT  * FROM [{0}]", sheetName);
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
adapter.Fill(dt);

1 个答案:

答案 0 :(得分:0)

我坚信你在拥有数据的单元格和代码所指向的单元格之间感到困惑。请仔细检查dt.Rows[0][j]所指的单元格。查看错误时j的值是多少。这将帮助您缩小到相关单元格。

如果单元格中包含存储为文本的数字,则代码不会失败。这是一种测试它的简单方法。

创建Excel文件并将其另存为C:\MyFile.xlsx。在单元格A2中,键入'1'将确保将该号码存储为文本。

enter image description here

现在,使用此代码

    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

enter image description here