SQL Server Local DB无法插入新表中的数据

时间:2015-05-30 02:51:21

标签: c# sql-server visual-studio

我面临着SQL Server本地数据库的问题,一切都可以使用insert into命令,但是当我想为从dataGridView存储的一些数据创建一个新表时,它会创建一个新表但是我无法插入到表中数据,它说语法错误,但我一直在程序的其他部分使用此代码,它工作正常,为什么它在这里不起作用?

string T_Name = tempId;
int suma;

string check_t = "IF NOT EXISTS (SELECT * FROM sys.sysobjects WHERE NAME = N'" + T_Name + "' AND xtype=N'U') CREATE TABLE [dbo].[" + T_Name + "](" + "[Drink] [varchar](50) NOT NULL," + "[Price] [INT] NOT NULL," + "[Amount] [INT] NOT NULL," + "[Total] [Int] NOT NULL," + ")";

sql_cn.Open();

try
{
            SqlCommand ext = new SqlCommand(check_t,sql_cn);

            ext.ExecuteNonQuery();

            foreach (DataGridViewRow rw in dataGridView1.Rows)
            {
                suma = Convert.ToInt16(rw.Cells[1].Value) * Convert.ToInt16(rw.Cells[2].Value);
                SqlCommand cmd1 = new SqlCommand("INSERT INTO " + T_Name + " (Drink,Price,Amount,Total) (@Drink,@Price,@Amount,@Total)", sql_cn);
                cmd1.Parameters.Add("@Drink", SqlDbType.VarChar).Value = Convert.ToString(rw.Cells[0].Value);
                cmd1.Parameters.Add("@Price", SqlDbType.VarChar).Value = Convert.ToInt16(rw.Cells[1].Value);
                cmd1.Parameters.Add("@Amount", SqlDbType.VarChar).Value = Convert.ToInt16(rw.Cells[2].Value);
                cmd1.Parameters.Add("@Total", SqlDbType.VarChar).Value = (Convert.ToInt16(rw.Cells[2].Value) * Convert.ToInt16(rw.Cells[1].Value));

                cmd1.ExecuteNonQuery();
            }

            MessageBox.Show("Data Stored", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch(Exception err)
        {
            MessageBox.Show(err.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        sql_cn.Close();
}

我也试过使用不同的插入代码,如:

INSERT INTO "+T_Name+" VALUES('"+Convert.ToString(rw.Cells[0].Value)+"','"+Convert.ToInt16(rw.Cells[1].Value)+"','"+Convert.ToInt16(rw.Cells[2].Value)+"','"+total+"')

1 个答案:

答案 0 :(得分:2)

听起来有两个问题。

它不喜欢表名(我不认为它们可以从数字开始,但我想它们可以因为那部分似乎对你很好),所以用方括号括起来。

此外,您在列名和参数之间缺少VALUES关键字。

SqlCommand cmd1 = new SqlCommand(
    "INSERT INTO [" + T_Name + "] (Drink,Price,Amount,Total) VALUES (@Drink,@Price,@Amount,@Total)",
    sql_cn);