我检查了我的价值观,但仍然说我没有足够的价值。我有一个值不在insert-statement中,但它是一个标识值,所以我想我不必在我的代码中指定它?!?!
无论如何,这里是代码:
string Fname = tbFIRSTNAME.Text.Trim();
string Lname = tbLASTNAME.Text.Trim();
string Sname = tbStreetName.Text.Trim();
string SSN = tbSSN.Text.Trim();
string CrimeID = cmbCRIMEID.Text.ToString();
string DangerLVL = cmbDANGERLEVEL.Text.ToString();
string CrimeDesc = rtbCrimeInfo.Text.Trim();
string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + '"' + Lname + '"' + Sname + '"' + SSN + '"' + DangerLVL + '"' + CrimeID + '"' + CrimeDesc + "')";
clsDB.InsUpDel(str);
答案 0 :(得分:2)
正如其他人所说,您的基本错误是您没有用逗号分隔所有值。 除此之外,你有一个很大的安全漏洞。这就是直接从文本框中使用您的值。这是软件设计中最不安全和最常见的安全漏洞,可能会导致您对应用程序进行SQL注入攻击。为避免这种情况,您应该使用参数化查询。这是一个恢复的代码,但你应该这样:
using(MySqlConnection conn = new MySqlConnection("YourConnectionString"))
{
conn.Open();
MySqlCommand command = conn.CreateCommand();
command.CommandText = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) VALUES (@FirstName, @LastName, @StreetName, @SSN, @CrimeID, @DangerLevel, @CrimeDescription)";
command.Parameters.AddWithValue("@FirstName", tbLASTNAME.Text.Trim());
command.Parameters.AddWithValue("@LastName", tbStreetName.Text.Trim());
/*
...
AND SO ON WITH OTHER PARAMETERS
...
*/
command.ExecuteNonQuery();
conn.Close();
}
答案 1 :(得分:1)
问题是你没有在你的值之间设置逗号(所以你实际输入的值不是7):
string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + "','" + Lname + "','" + Sname + "'," + SSN + "," + DangerLVL + "," + CrimeID + ",'" + CrimeDesc + "')";
显然,''
之间也没有包含一些varchar类型。现在情况并非如此,但添加逗号后,由于类型不匹配,您可能会收到其他错误