Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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#到Microsoft access_C#_Database_Visual Studio_Ms Access_Ms Access 2010 - Fatal编程技术网

插入c#到Microsoft access

插入c#到Microsoft access,c#,database,visual-studio,ms-access,ms-access-2010,C#,Database,Visual Studio,Ms Access,Ms Access 2010,我试图将一些文本框中的文本插入access中的数据库。代码不会产生错误,但似乎不会将项目添加到数据库中 数据库称为“数据库”,表称为“TotalPlayerName”,字段称为“玩家名称”。 表中还有其他字段 for(int i = 0; i < numberOfPlayers; i++){ using (OleDbConnection connection = new OleDbConnection(@"CONNECTION STRING"){ using (OleDbCo

我试图将一些文本框中的文本插入access中的数据库。代码不会产生错误,但似乎不会将项目添加到数据库中

数据库称为“数据库”,表称为“TotalPlayerName”,字段称为“玩家名称”。 表中还有其他字段

for(int i = 0; i < numberOfPlayers; i++){

  using (OleDbConnection connection = new OleDbConnection(@"CONNECTION STRING"){
    using (OleDbCommand command = new OleDbCommand(@"INSERT INTO TotalPlayerName ([Player Name]) VALUES(@p1)", connection)){

      connection.Open();
      command.Parameters.Add("@p1", OleDbType.VarWChar).Value = Convert.ToString(textBox[i].Text);
      command.ExecuteNonQuery();

    }

  }

}
for(int i=0;i
您可能只需要声明@p1,因为您在INSERT语句中调用了它,但它从未定义为变量,例如:varchar、int、etc等。这可能适用于您尝试执行的操作:

using (OleDbCommand command = new OleDbCommand(@"DECLARE @p1 VARCHAR(50) INSERT  INTO TotalPlayerName ([Player Name]) VALUES(@p1)", connection)){ 
如果可能的话,我肯定会将其作为一个存储过程(如果可以的话)。这适用于SQL不确定它是否适用于MS Access,但我可以想象。您可能要做的另一件事是确保它找到了正确的数据库

Database.dbo.TotalPlayerName

但这可能不是问题所在,可能只是缺少变量声明。

虽然我看不出您的代码有什么特别的错误,但我可以告诉您,您的方法有点错误。具体来说,对于循环的每一次迭代,您都是:

  • 建立与数据库的连接
  • 创建insert命令、创建参数并指定值
  • 执行插入
  • 如果您只执行一次步骤1和第2部分,然后在循环中执行以下语句,则会更好:

    using (OleDbConnection conn = new OleDbConnection(
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\foo.accdb"))
    {
        conn.Open();
    
        OleDbCommand command = new OleDbCommand(
            @"INSERT INTO TotalPlayerName ([Player Name]) VALUES (@p1)", conn);
        command.Parameters.Add(new OleDbParameter("@p1", OleDbType.VarChar));
    
        for (int i = 0; i < numberOfPlayers; i++)
        {
            command.Parameters[0].Value = textbox[i].Text;
    
            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                // do something
            }
        }
    
        conn.Close();
    }
    
    使用(OLEDB连接连接=新OLEDB连接(
    @“Provider=Microsoft.ACE.OLEDB.12.0;数据源=c:\foo.accdb”))
    {
    conn.Open();
    OleDbCommand命令=新的OleDbCommand(
    @“插入TotalPlayerName([玩家名称])值(@p1)”,康涅狄格州);
    Add(新的OleDbParameter(“@p1”,OleDbType.VarChar));
    for(int i=0;i
    我假设
    textbox
    是实际文本框控件的数组或列表。如果是这种情况,那么
    textbox[I]。Text
    已经是一个字符串,您不需要做任何特殊的操作来让OLE识别它


    最后,请注意--添加try/catch并在那里放置一个断点。您确定它没有失败吗?如果您在调试模式下运行,则无法保证您的程序会停止--它可能会返回表单而不报告任何错误。在您尝试部署应用程序之前,您可能不会看到实际的错误发生

    感谢您的反馈,但这只是抛出了一个语法错误。@Alby由于它只是一个文本查询,您可以做的是:使用(OleDbCommand命令=新OleDbCommand(“插入到TotalPlayerName([Player Name])值(“+Convert.ToString(textBox[i].text)+”,连接)){