Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储为文本的数字表示错误_C#_Excel - Fatal编程技术网

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文件并将其另存为say
C:\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文件并将其另存为say
C:\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我更新了我的问题