列ID不属于表

时间:2018-12-22 13:27:27

标签: c# sql-server

我正在尝试将CS​​V文件导入SQL Server数据库

这是我的代码,找不到问题:(

foreach(DataRow importRow in KeminRecipe.Rows) {

  SqlCommand cmd = new SqlCommand("INSERT INTO KeminRecipe (ID,DateAndTime,Recipe,ReadingSensor,LabResult,MoistureSensor,DryPoint,WetPoint,Enabled,Error,BatchTime,BatchSize,MoistAdd,ProductAIncluded,ProductBIncluded,LastUser,LastAccess) " + "VALUES (@ID,@DateAndTime,@Recipe,@ReadingSensor,@LabResult,@MoistureSensor,@DryPoint,@WetPoint,@Enabled,@Error,@BatchTime,@BatchSize,@MoistAdd,@ProductAIncluded,@ProductBIncluded,@LastUser,@LastAccess)", conn);

//here the error displays starting with ID//  cmd.Parameters.AddWithValue("@ID", importRow["ID"]);
  cmd.Parameters.AddWithValue("@DateAndTime", importRow["DateAndTime"]);
  cmd.Parameters.AddWithValue("@Recipe", importRow["Recipe"]);
  cmd.Parameters.AddWithValue("@ReadingSensor", importRow["ReadingSensor"]);
  cmd.Parameters.AddWithValue("@LabResult", importRow["LabResult"]);
  cmd.Parameters.AddWithValue("@MoistureSensor", importRow["MoistureSensor"]);
  cmd.Parameters.AddWithValue("@DryPoint", importRow["DryPoint"]);
  cmd.Parameters.AddWithValue("@WetPoint", importRow["WetPoint"]);
  cmd.Parameters.AddWithValue("@Enabled", importRow["Enabled"]);
  cmd.Parameters.AddWithValue("@Error", importRow["Error"]);
  cmd.Parameters.AddWithValue("@BatchTime", importRow["BatchTime"]);
  cmd.Parameters.AddWithValue("@BatchSize", importRow["BatchSize"]);
  cmd.Parameters.AddWithValue("@MoistAdd", importRow["MoistAdd"]);
  cmd.Parameters.AddWithValue("@ProductAIncluded", importRow["ProductAIncluded"]);
  cmd.Parameters.AddWithValue("@ProductBIncluded", importRow["ProductBIncluded"]);
  cmd.Parameters.AddWithValue("@LastUser", importRow["LastUser"]);
  cmd.Parameters.AddWithValue("@LastAccess", importRow["LastAccess"]);

  cmd.ExecuteNonQuery();

}

private void BROWSE(object sender, EventArgs e)
    {

        OpenFileDialog CSV = new OpenFileDialog();
        CSV.DefaultExt = ".csv";
        CSV.Filter = "Comma Separated (*.csv)|*.csv";
        CSV.ShowDialog();

        CsvFolderPath.Text = CSV.FileName;
    }

private void IMPORT(object sender, EventArgs e)
    {
        if (String.IsNullOrEmpty(CsvFolderPath.Text )) 
        {
            MessageBox.Show("Please choose a csv file");
            return;
        }

        else
        {
            DataTable KeminRecipe = GetDataFromFile();

            if (KeminRecipe != null) ;
            SaveImportDataToDatabase(KeminRecipe);

            MessageBox.Show("Import Complete");
        }



    }

CSV数据:

“ ID”;“日期和时间”;“食谱”;“读数传感器”;“实验室结果%”;“水分传感器%”;“干燥点”;“湿点” “;”启用“;”错误“;”批处理时间[s]“;”批处理大小[kg]“;”水分添加[%]“;”包含产品1“;”包含产品2“;” LastUser “;” LastAccess“

VALUE 19; 04/21/2016 09:45:49; 101; 4448; 8.8; 0.0; 1; 0; 0; -1.19; 309; 2000; 0.0; 1; 0 ; operator; 11/02/2018 00:00:01

给我一​​个错误:

  

列ID不属于表格

1 个答案:

答案 0 :(得分:1)

最后,我找到了解决我问题的方法。答案包括两种解决方案。

1)在我的情况下,带有csv扩展名的文件用分隔;代替,。在我的代码中,我使用,分隔流了csv文件(streamreader)。这就是为什么它不起作用的原因。 VS将数据视为一列而不是多列。

 string[] headerColumns = header.Split(';'); // so i changed , to ;
                foreach (string headerColumn in headerColumns)
                {
                    CSVData.Columns.Add(headerColumn);
                }

                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();

                    if (string.IsNullOrEmpty(line)) continue;

                    string[] fields = line.Split(';'); // so i changed , to ;
                    DataRow importedRow = CSVData.NewRow();

2)CSV文件包含的列为“ Columntitle”。我必须删除“”,以便我的代码可以识别我在sql数据库中使用的标头。

我发现两种解决方案都使用VS属性来检查字符串或数据表中包含哪些数据。