从SQL Server表中删除一行
我试图简单地从我的SQL Server数据库表中使用按钮事件删除一整行。到目前为止,我的尝试都没有成功。这就是我想要做的事:从SQL Server表中删除一行
public static void deleteRow(string table, string columnName, string IDNumber)
{
try
{
using (SqlConnection con = new SqlConnection(Global.connectionString))
{
con.Open();
using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + IDNumber, con))
{
command.ExecuteNonQuery();
}
con.Close();
}
}
catch (SystemException ex)
{
MessageBox.Show(string.Format("An error occurred: {0}", ex.Message));
}
}
}
我不断收到错误:
A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll An error occurred: Operand type clash: text is incompatible with int
所有在表中的列是TEXT
类型。为什么我无法将类型为string
的函数参数与列进行比较以找到匹配项? (然后删除该行?)
正如你所指出,所有的列名是文本类型的关闭连接,所以,有必要通过在IDNumber周围使用单引号将IDNumber用作文本.....
public static void deleteRow(string table, string columnName, string IDNumber)
{
try
{
using (SqlConnection con = new SqlConnection(Global.connectionString))
{
con.Open();
using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber+"'", con))
{
command.ExecuteNonQuery();
}
con.Close();
}
}
catch (SystemException ex)
{
MessageBox.Show(string.Format("An error occurred: {0}", ex.Message));
}
}
}
要么IDNumber
应该是int
,而不是string
,或者如果它真的是一个string
,加引号。
更好的是,使用参数。
使用正则引号(“)我回来了:'发生错误:无效的列名称'50012'.'其中50012是IDNumber (字符串) – ikathegreat 2012-03-06 04:23:56
@ikathegreat - 试试kashif的例子,使用参数避免了像这样的数据类型的麻烦,而且,正如其他海报所说的,你几乎肯定不希望所有这些字段都是TEXT。 – 2012-03-06 11:42:28
看起来像IDNumber是一个字符串。它需要单引号缠绕它。
"DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'"
this returns :发生错误:数据类型text和varchar在等于运算符中不兼容 – ikathegreat 2012-03-06 04:21:57
尝试用放慢参数
.....................
.....................
using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + @IDNumber, con))
{
command.Paramter.Add("@IDNumber",IDNumber)
command.ExecuteNonQuery();
}
.....................
.....................
无需使用声明
private void button4_Click(object sender, EventArgs e)
{
String st = "DELETE FROM supplier WHERE supplier_id =" + textBox1.Text;
SqlCommand sqlcom = new SqlCommand(st, myConnection);
try
{
sqlcom.ExecuteNonQuery();
MessageBox.Show("delete successful");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
private void button6_Click(object sender, EventArgs e)
{
String st = "SELECT * FROM suppliers";
SqlCommand sqlcom = new SqlCommand(st, myConnection);
try
{
sqlcom.ExecuteNonQuery();
SqlDataReader reader = sqlcom.ExecuteReader();
DataTable datatable = new DataTable();
datatable.Load(reader);
dataGridView1.DataSource = datatable;
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
你应该使用这个参数。 – 2012-03-06 03:07:20
我不确定如何使用参数,任何示例?资源? – ikathegreat 2012-03-06 04:24:23
另外,作为一个附注:首先,你不应该再使用'TEXT' - 从SQL Server 2005开始它已经被弃用了。改用'VARCHAR(MAX)'。另外:拥有**所有列**是'VARCHAR(MAX)'闻起来像一个可怕的设计 - 你真的**需要2 GB的文本**每列** ** ?? **设计和性能提示:使用适当的数据类型 – 2012-03-06 05:50:10