失败的SQL插入

时间:2015-11-05 15:57:50

标签: c# sql sql-server visual-studio

我想知道有人可以帮我解决这个SQL插入查询吗?我有一种令人讨厌的怀疑,我正在盯着一些非常明显的东西,但我现在已经试图弄清楚它已经有一段时间了,而且我看不出有什么不对。目前,当我尝试执行时,它会直接进入catch循环。我正在使用Visual Studio Community 2015.顺便说一下,在VS中哪里可以试用SQL语句?

这是代码

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection myConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = ""C:\Users\Nick\Documents\Investments 4.mdf""; Integrated Security = True; Connect Timeout = 30");
            myConnection.Open();
            if (myConnection.State == ConnectionState.Open)
            {
                MessageBox.Show("Connection Open");
            }

            SqlCommand myCommand3 = new SqlCommand();
            myCommand3.CommandType = System.Data.CommandType.Text;
            myCommand3.CommandText = "INSERT INTO Dbo.Values (Portfolio Name,Date,Daily Value,Daily Percent) VALUES ('Ascentric',@SQLTime,2000,0.01)";
            //myCommand.Parameters.Add("@SQLPortName", System.Data.SqlDbType.NVarChar);
            //myCommand.Parameters["@SQLPortName"].Value = "Eric";
            myCommand3.Parameters.Add("@SQLTime", System.Data.SqlDbType.DateTime );
            myCommand3.Parameters["@SQLTime"].Value = DateTime.Today;
            myCommand3.ExecuteNonQuery();
            myConnection.Close();
        }

        catch
        {
            MessageBox.Show("Nope.  Didn't work");
        }



    }

以下是表格:

enter image description here

顺便说一下,我确实理解我需要对此进行参数化,但我只是想让基本语句在当前工作。

感激不尽的任何帮助!

2 个答案:

答案 0 :(得分:7)

如果列名包含空格,或者是保留关键字(例如Date),则必须将列名包装在括号中:

 myCommand3.CommandText = "INSERT INTO Dbo.Values ([Portfolio Name],[Date],[Daily Value],[Daily Percent]) VALUES ('Ascentric',@SQLTime,2000,0.01)";

作为最佳实践:不要永远在SQL中为对象(列,SPROCS等)使用空格。使用CamelCase或underscores_to_separate_words。因为有一天你会再次忘记括号。

答案 1 :(得分:2)

使用Space创建列不是最佳实践。首先删除空格并将列作为单个单词。如果要在选择时显示空格,可以使用别名。

myCommand3.CommandText = "INSERT INTO dbo.Values (PortfolioName,[Date],DailyValue,DailyPercent) VALUES ('Ascentric',@SQLTime,2000,0.01)";
myCommand3.Parameters.Add(new SqlParameter("@SQLTime",DateTime.Today.ToString());