C#:将字符串数组中的数据输入到MS Access DB表中

时间:2013-10-24 17:05:33

标签: c# ms-access ado.net

我尽可能多地搜索,找不到任何可以帮助我的东西。所以我所拥有的是一个脚本,它读取/拆分并将.txt文件中的数据存储到某些数组中。 (这里列出的是Vndnbr)。我遇到的问题是如何将数组中的每个条目作为MS Access表中列下的条目输入?这就是我到目前为止所做的:

public void AddToDatabase()
{
    OleDbCommand command;
    OleDbConnection connection =
        new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Data Source=filepath");
    foreach (string x in Vndnbr)
    {
        cmdstringVND[k] = "insert into Table1 (Vndnbr) Values (x)";
        k++;
        command = OleDbCommand(cmdstringVND[k],connection);
    }

    command.Parameters.AddWithValue("?", ReadFromFile("filepath"));
    connection.Open();
    command.ExecuteNonQuery();
    connection.Close();
}

我不熟悉Access库或者应该在AddwithValue的第一个参数中插入什么,因为我只是在做了一些研究后复制粘贴这些行。 如果有人可以帮助我如何将数组中的所有数据添加到表中,将非常感谢,谢谢。

2 个答案:

答案 0 :(得分:3)

您的代码中存在许多错误

  • 在循环中,您不使用参数来存储值 插入
  • 你永远不会破坏命令。 (使用新的)
  • 尝试只执行最后一个命令,因为ExecuteNonQuery在循环之外

    public void AddToDatabase()
    {
        string cmdText = "insert into Table1 (Vndnbr) Values (?)";
        using(OleDbConnection connection = new OleDbConnection(.....))
        using(OleDbCommand command = new OleDbCommand(cmdText, connection))
        {
            connection.Open();
            command.Parameters.AddWithValue("@p1", "");
            foreach (string x in Vndnbr)
            {
                 command.Parameters["@p1"].Value = x;
                 command.ExecuteNonQuery();
    
            }
        }
    }
    

我已经更改了代码以包含using statement以正确关闭并处理连接和命令,然后我在循环外部初始化了命令,传递了一个公共字符串作为参数占位符并初始化了此参数具有虚拟值。

在循环内部,我将前一个参数值替换为Vndnbr列表获得的实际值并执行命令。

答案 1 :(得分:1)

您需要将SQL更改为:

"insert into Table1 (Vndnbr) Values (@x)";

然后AddWithValue就像这样:

command.Parameters.AddWithValue("@x", ReadFromFile("filepath"));

您所做的只是说,对于此参数名称,我希望指定此值。