private void btnID_Click(object sender, EventArgs e)
{
//Set Up Conncetion
SqlConnection myconnection = new SqlConnection(global::Database_connection_inForm.Properties.Settings.Default.Database1ConnectionString);
try
{
string sql = "INSERT INTO Students(Student ID,Student Name) values("+txtID.Text+",'"+txtName.Text+"')";
//Command object
SqlCommand exeSql = new SqlCommand(sql, myconnection);
myconnection.Open(); //Opening connection
exeSql.ExecuteNonQuery();
MessageBox.Show("Add new Record Done!","Message",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.studentsTableAdapter.Fill(this.database1DataSet.Students);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
myconnection.Close();
}
}
private void btnRef_Click(object sender, EventArgs e)
{
this.studentsTableAdapter.Fill(this.database1DataSet.Students);
}
}
答案 0 :(得分:3)
当列名包含空格时,您应始终使用方括号
封装该名称sql = "INSERT INTO Students([Student ID],[Student Name]) ....."
说,请删除你的字符串连接并使用参数化查询ALWAYS。 使用参数而不是字符串concat要好得多。主要原因是避免使用Sql Injection,但参数方法也会删除引用问题(IE名称='O'Brian'在使用字符串concat时会导致语法错误)
private void btnID_Click(object sender, EventArgs e)
{
try
{
string sql = "INSERT INTO Students([Student ID],[Student Name]) " +
"values (@id, @name)";
using(SqlConnection myconnection = new SqlConnection(....))
using(SqlCommand exeSql = new SqlCommand(sql, myconnection))
{
myconnection.Open();
exeSql.Parameters.AddWithValue("@id",Convert.ToInt32(txtID.Text));
exeSql.Parameters.AddWithValue("@name",txtName.Text);
exeSql.ExecuteNonQuery();
}
}
.....
另请注意,我已将txtID.Text内容转换为整数而不进行任何检查 如果您的用户键入的内容不是有效的数字ID,则可能会失败(如果学生ID是Identity列,则绝不应在INSERT语句中传递此值)
作为最后的说明。你真的需要这些列名吗?让它们没有空格要好得多,否则每次使用这个表都会遇到这个问题
答案 1 :(得分:0)
如果您的标识符包含空格,则必须分隔标识符。您这样做的方式取决于您使用的数据库。
在SQL Server中,您使用方括号:
string sql = "INSERT INTO Students([Student ID],[Student Name]) values(@Id,@Name)";
在MySQL中你使用反引号:
string sql = "INSERT INTO Students(`Student ID`,`Student Name`) values(@Id,@Name)";
请注意,我已使用参数替换了查询中的连接值。您应该使用参数化查询,否则您的代码会对SQL注入攻击持开放态度。
答案 2 :(得分:0)
首先,您没有使用正确的命名约定
你应该使用
StudentId 或 Student_Id (建议使用第一个)
如果列名称之间有空格,则应使用“[” “]”并覆盖列名称
答案 3 :(得分:-1)
列名称中有空格
string sql = "INSERT INTO Students(Student ID,Student Name) values("+txtID.Text+",'"+txtName.Text+"')";
这是一个问题 - 检查列名并使用正确的列名。