我想知道有人可以帮我解决这个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");
}
}
以下是表格:
顺便说一下,我确实理解我需要对此进行参数化,但我只是想让基本语句在当前工作。
感激不尽的任何帮助!
答案 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());