SQL 服务器的 C# 插入语句出错

Error in C# insert statement for SQL Server

我正在尝试将 C# Winforms 中的插入语句传递给 SQL 服务器。我不断收到对我来说毫无意义的语法错误

error in syntax near "("

我的语法非常好,当我复制并粘贴到 SQL Server Mgmt Studio 时,代码运行完美。

如有任何帮助,我们将不胜感激!

谢谢!

try
{
    using (var cmd = new SqlCommand("INSERT INTO " +        intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + "," +
                    colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))
    {
        cmd.Connection = con;

        cmd.Parameters.AddWithValue("@tbl", intodrop.SelectedText);
        cmd.Parameters.AddWithValue("@colname", colnamedrop.SelectedText);
        cmd.Parameters.AddWithValue("@values", valuebox.Text);
        cmd.Parameters.AddWithValue("@colname2", colnamedrop2.SelectedText);

        con.Open();

        if (cmd.ExecuteNonQuery() > 0)
        {
            MessageBox.Show("Record inserted");
        }
        else
        {
            MessageBox.Show("Record failed");
        }
    }
}
catch (Exception g)
{
    MessageBox.Show("Error during insert: " + g.Message);
}

准备插入 sql 语句时,您在列名之间错过了逗号。打印时有逗号并正确显示。

没有任何输入验证的串联 sql 语句对 sql 注入攻击广泛开放。尽量使用参数。

您似乎在尝试向两列中插入值,但您是像这样 "Col1+Col2" 而不是 "Col1+','+Col2".

来追加它们
using (var cmd = new SqlCommand("INSERT INTO " + intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + ','+
                    colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))

我希望这能解决问题。

检查 SelectedText 属性 returns 值是否正确。尝试改用 Text 属性。

var cmd = new SqlCommand("INSERT INTO " + intodrop.Text + 
"(" + colnamedrop.Text + ',' + colnamedrop2.Text + ") " 
+ "VALUES" + " (" + valuebox.Text + ");")

首先尝试对您的插入值进行硬编码,然后根据您的需要对其进行更改。确认列数据类型分配正确。

try 
{

    using (SqlCommand cmd = new SqlCommand("INSERT INTO Property ( FolioNo,PropertyType) VALUES (001,'WIP')"))
    {
        cmd.Connection = con;
        con.Open();
        if (cmd.ExecuteNonQuery() > 0)
        {
            MessageBox.Show("Record inserted");
        }
        else
        {
            MessageBox.Show("Record failed");
        }
    }
}
catch (Exception g)
{
    MessageBox.Show("Error during insert: " + g.Message);
}

1) 你应该有两个文本框来输入你的值。如果没有列名,则将第 1 列的值变灰,第 2 列也一样。 这使您不必输入引号(不要忘记使用转义引号

2) 使用 string.format 函数提高可读性

try
{

    //Add columns selected
    List<string> Mycolumns = new List<string>();
    If (! string.IsNullOrEmpty(colnamedrop.Text)) Mycolumns.Add(colnamedrop.Text);
    If (! string.IsNullOrEmpty(colnamedrop2.Text)) Mycolumns.Add(colnamedrop2.Text);

    //Add values selected with escaped quoted and string quoted
    List<string> Myvalues ​​= new List<string>();
    If (! string.IsNullOrEmpty(colvalue1.Text)) Myvalues.Add("'" + colvalue1.Text.Replace("'", "''") + "'");
    If (! string.IsNullOrEmpty(colvalue2.Text)) Myvalues.Add("'" + colvalue2.Text.Replace("'", "''") + "'");

    //If nothing selected, no action
    if (Mycolumns.Count==0 && Myvalues.Count==0) return;

    //Build query
    String Query = string.Format ( "INSERT INTO {0} ({1}) VALUES ({2})", intodrop.Text, string.Join(Mycolumns, ", "), string.Join(Myvalues, ", "));

    //Execute query    
    using (var cmd = new SqlCommand(Query, con ))
    {
        con.Open();

        if (cmd.ExecuteNonQuery() > 0)
        {
            MessageBox.Show("Record inserted");
        }
        else
        {
            MessageBox.Show("Record failed");
        }

        con.Close();
    }
}
catch (Exception g)
{
    MessageBox.Show("Error during insert: " + g.Message);
}