System.Data.SqlClient.SqlException:列名无效(第 command.ExecuteNonQuery() 行出错;)
System.Data.SqlClient.SqlException: Invalid column name (Error at line command.ExecuteNonQuery();)
所以我总是遇到这个错误。我不确定问题是否出在 SQL-server 中。此代码用于将数据插入数据库。
发送帮助。
I'm getting this message while executing the code
private void registracija_btn_Click(object sender, EventArgs e)
{
string RegistracijaUporabnisko = RegistracijaUporabnisko_txt.Text;
string RegistracijaGeslo = RegistracijaGeslo_txt.Text;
string RegistracijaMail = RegistracijaMail_txt.Text;
try
{
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Napaka: " + ex);
}
}
尝试
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES('" + RegistracijaUporabnisko + "', '" + RegistracijaGeslo + "', '" + RegistracijaMail + "')";
通常,您只需要将字符串类型数据的值括起来,但是为了安全起见,在插入语句中始终将值括在单引号中
Parameters(下方)解决了这个问题和一系列其他问题,包括 SQL 注入、i18n/l10n 等。也 您可能只是打错了列名,在这种情况下我们无法帮助您,因为我们不知道真实姓名。
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.Parameters.AddWithValue("@uporabnisko_ime", RegistracijaUporabnisko_txt.Text);
command.Parameters.AddWithValue("@geslo", RegistracijaGeslo_txt.Text);
command.Parameters.AddWithValue("@email", RegistracijaMail_txt.Text);
con.Close();
}
我也从不厌倦为这样的事情推荐像 Dapper 这样的工具:
con.Execute("INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)", new {
uporabnisko_ime = RegistracijaUporabnisko_txt.Text,
geslo = RegistracijaGeslo_txt.Text,
email = RegistracijaMail_txt.Text });
它完成所有工作,包括(如果需要)连接 open/close、命令构造、参数打包等
让我们看看您的代码:
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
好的,如果 RegistracijaUporabnisko
的值为 Rok,RegistracijaGeslo
的值为 Rok,RegistracijaMail
的值为 Rok@home.. 你的字符串现在看起来像什么?嗯
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(Rok,Rok,Rok@home)";
它要查找的 Rok 是一个字段,而不是一个值。因此它说无效列。
那么,如果您采用
的普遍采用的方式来做呢?
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(@RegistracijaUporabnisko ,@RegistracijaGeslo ,@email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
command.Parameters.AddWithValue("@RegistracijaUporabnisko ", RegistracijaUporabnisko );
command.Parameters.AddWithValue("@RegistracijaGeslo ", RegistracijaGeslo );
command.Parameters.AddWithValue("@email", email);
con.Open();
command.ExecuteNonQuery();
con.Close();
}
现在发生了什么?好吧,在幕后输入的文本用引号括起来,日期以适当的格式发送,数字都是……为你处理的。它可以保护您免受注入,这样如果我输入 "; drop table uporabnik2
的名称,您就不会发现自己丢失了 table 等
所以我总是遇到这个错误。我不确定问题是否出在 SQL-server 中。此代码用于将数据插入数据库。
发送帮助。
I'm getting this message while executing the code
private void registracija_btn_Click(object sender, EventArgs e)
{
string RegistracijaUporabnisko = RegistracijaUporabnisko_txt.Text;
string RegistracijaGeslo = RegistracijaGeslo_txt.Text;
string RegistracijaMail = RegistracijaMail_txt.Text;
try
{
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Napaka: " + ex);
}
}
尝试
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES('" + RegistracijaUporabnisko + "', '" + RegistracijaGeslo + "', '" + RegistracijaMail + "')";
通常,您只需要将字符串类型数据的值括起来,但是为了安全起见,在插入语句中始终将值括在单引号中
Parameters(下方)解决了这个问题和一系列其他问题,包括 SQL 注入、i18n/l10n 等。也 您可能只是打错了列名,在这种情况下我们无法帮助您,因为我们不知道真实姓名。
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.Parameters.AddWithValue("@uporabnisko_ime", RegistracijaUporabnisko_txt.Text);
command.Parameters.AddWithValue("@geslo", RegistracijaGeslo_txt.Text);
command.Parameters.AddWithValue("@email", RegistracijaMail_txt.Text);
con.Close();
}
我也从不厌倦为这样的事情推荐像 Dapper 这样的工具:
con.Execute("INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)", new {
uporabnisko_ime = RegistracijaUporabnisko_txt.Text,
geslo = RegistracijaGeslo_txt.Text,
email = RegistracijaMail_txt.Text });
它完成所有工作,包括(如果需要)连接 open/close、命令构造、参数打包等
让我们看看您的代码:
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
好的,如果 RegistracijaUporabnisko
的值为 Rok,RegistracijaGeslo
的值为 Rok,RegistracijaMail
的值为 Rok@home.. 你的字符串现在看起来像什么?嗯
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(Rok,Rok,Rok@home)";
它要查找的 Rok 是一个字段,而不是一个值。因此它说无效列。
那么,如果您采用
的普遍采用的方式来做呢? string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(@RegistracijaUporabnisko ,@RegistracijaGeslo ,@email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
command.Parameters.AddWithValue("@RegistracijaUporabnisko ", RegistracijaUporabnisko );
command.Parameters.AddWithValue("@RegistracijaGeslo ", RegistracijaGeslo );
command.Parameters.AddWithValue("@email", email);
con.Open();
command.ExecuteNonQuery();
con.Close();
}
现在发生了什么?好吧,在幕后输入的文本用引号括起来,日期以适当的格式发送,数字都是……为你处理的。它可以保护您免受注入,这样如果我输入 "; drop table uporabnik2
的名称,您就不会发现自己丢失了 table 等