Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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# 使用OLEDB SQL数据库添加行_C#_Sql_Database_Oledb_Add - Fatal编程技术网

C# 使用OLEDB SQL数据库添加行

C# 使用OLEDB SQL数据库添加行,c#,sql,database,oledb,add,C#,Sql,Database,Oledb,Add,我编写了一个代码来添加从文本框获取值的行 我写了一个代码,但它不能正常工作。 当idebuggit时,我得到了这个错误:“INSERT-INTO命令中的语法错误” 我不知道如何使它工作。 代码如下: private void addRow_Click(object sender, EventArgs e) { string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C

我编写了一个代码来添加从文本框获取值的行

我写了一个代码,但它不能正常工作。 当idebuggit时,我得到了这个错误:“INSERT-INTO命令中的语法错误” 我不知道如何使它工作。 代码如下:

        private void addRow_Click(object sender, EventArgs e)
    {
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
        OleDbConnection myConnection = new OleDbConnection(connectionString);
        string myAddingQuery = string.Format("insert into tblCodons(codonsCodon1, codonsCodon3, " +
        "codonsTriplet1, codonsTriplet2, codonsTriplet3, codonsTriplet4, " +
        "codonsTriplet5, codonsTriplet6, codonsFullName" +
        ") values ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8})", 
        codon1.Text, codon3.Text, triplet1.Text, triplet2.Text,
         triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text);
        OleDbCommand myCommand = new OleDbCommand(myAddingQuery);
        myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        myCommand.Connection.Close();

    }

TNX给帮手们

它可能在抱怨,因为您没有引用任何值。但是,无论如何,您不应该直接在SQL中包含这些值——您应该使用参数化语句。这样:

  • 将代码与数据分开,这总是一件好事
  • 您可以避免SQL注入攻击
  • 您不必担心日期和数字之类的转换格式
有关完整示例,请参阅文档。您的代码可能会变成:

private void addRow_Click(object sender, EventArgs e)
{
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
        "Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        string sql = "insert into tblCodons(codonsCodon1, codonsCodon3, " +
            "codonsTriplet1, codonsTriplet2, codonsTriplet3, codonsTriplet4, " +
            "codonsTriplet5, codonsTriplet6, codonsFullName" +
            ") values (?, ?, ?, ?, ?, ?, ?, ?, ?)";
        using (OleDbCommand command = new OleDbCommand(sql, connection))
        {
            connection.Open();
            command.Parameters.AddWithValue("codon1", codon1.Text);
            command.Parameters.AddWithValue("codon3", codon3.Text);
            command.Parameters.AddWithValue("triplet1", triplet1.Text);
            command.Parameters.AddWithValue("triplet2", triplet2.Text);
            command.Parameters.AddWithValue("triplet3", triplet3.Text);
            command.Parameters.AddWithValue("triplet4", triplet4.Text);
            command.Parameters.AddWithValue("triplet5", triplet5.Text);
            command.Parameters.AddWithValue("triplet6", triplet6.Text);
            command.Parameters.AddWithValue("fullName", fullName.Text);
            command.ExecuteNonQuery();
        }
    }
}

好的,谢谢你的回复,但它不允许我留下一些空值。有没有办法留下一些空的审查员?@user1017315:只使用一个空字符串。如果模式允许的话,应该没问题。我不明白。当我尝试从access软件中添加新行时,“它允许我”。@user1017315:您还没有说当您使用此代码尝试时会发生什么情况……当我使用此代码时,并且没有填充所有texbox(但我确实填充了一些),我得到以下错误:System.Data.OleDb.OleDbException(0x80004005):字段tblCodons.codonsTriplet2'不能是零长度字符串。