我想检查有效数据......
我有一张Divisi表,里面有这样的样本数据:
=====================
IdDivisi NamaDivisi
=====================
1 DivisiA
2 DivisiB
3 DivisiC
在我的代码中,我得到了价值: string data = DivisiA; DivXXX
因此,当选中时,警报将显示无效数据。 我想得到这样的查询:
select NamaDivisi from Divisi where NamaDivisi IN('DivisiA','DivXXX')
,结果为null或空或无效。 因为有值/数据' DivXXX'在Divisi表上无效
但是这一次,当我调试时,我得到了这样的查询结果:
select NamaDivisi from Divisi where NamaDivisi IN ('DivisiA;DivXXX')
=============================================== ====
这是完整的代码。
private string CekValidDivisi(string data)
{
DivisiFacade div = new DivisiFacade();
string getDivisi = div.CekValidData(data);
return getDivisi;
}
public string CekValidData(string data)
{
SqlConnection Conn = DataSetting.GetSqlConnection();
SqlCommand Comm = new SqlCommand();
try
{
Conn.Open();
string sql = @"select NamaDivisi from Divisi where NamaDivisi IN('" + data + "')";
Comm = new SqlCommand(sql, Conn);
data = Convert.ToString(Comm.ExecuteScalar());
}
finally
{
Conn.Close();
Conn.Dispose();
}
return data;
}
请帮我解决我的代码中的问题。谢谢......
答案 0 :(得分:0)
您的代码中存在多个问题,但这不是教您基础知识的地方,所以我会尝试坚持这个主题。如果你想拥有这样的参数,你必须先创建它。我猜data
包含值为DivisiA;DivXXX
的字符串(我认为DivXXX只是一个通用名称,意味着你有多个分区)。可能最简单的方法是用它做这样的事情
public string CekValidData(string data)
{
SqlConnection Conn = DataSetting.GetSqlConnection();
SqlCommand Comm = new SqlCommand();
try
{
Conn.Open();
string paramData = ParseData(data);
string sql = @"select NamaDivisi from Divisi where NamaDivisi IN('" + paramData + "')";
Comm = new SqlCommand(sql, Conn);
data = Convert.ToString(Comm.ExecuteScalar());
}
finally
{
Conn.Close();
Conn.Dispose();
}
return data;
}
private string ParseData(string data)
{
return data.Replace(";", "','");
}
没试过,但希望你明白这个想法。无论哪种方式,请为自己的利益,研究一下在c#中处理sql连接的最佳方法是什么,以及如何防止SQL注入。