C# 如何设置sql参数
我尝试了使用sql参数的代码,但没有工作,也没有返回任何错误。我怎样才能修好它C# 如何设置sql参数,c#,mysql,database,sql-injection,sqlparameter,C#,Mysql,Database,Sql Injection,Sqlparameter,我尝试了使用sql参数的代码,但没有工作,也没有返回任何错误。我怎样才能修好它 string sql = "SELECT * FROM "+mw.db_name+".ananmez_genel Where hasta_id='@hastaid'"; string connectionString = ConfigurationManager.ConnectionStrings["MYDBConnectionString"].ConnectionString; using (MySqlConn
string sql = "SELECT * FROM "+mw.db_name+".ananmez_genel Where hasta_id='@hastaid'";
string connectionString = ConfigurationManager.ConnectionStrings["MYDBConnectionString"].ConnectionString;
using (MySqlConnection connect = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand(sql, connect))
{
connect.Open();
cmd.Parameters.AddWithValue("@hastaid",hasta_id);
MySqlDataReader mdr;
mdr = cmd.ExecuteReader();
if (mdr.Read())
{
for (int i = 0; i < 20; i++)
{
arti = (i + 1).ToString();
kontrol = mdr.GetString("c_" + arti);
if (kontrol == "True")
{
ananmezcheck.ananmez_gnlkontrol(i, check);
}
}
yirmibir.Text = mdr.GetString("txt_1");
}
connect.Close();
}
因此数据库中没有问题。这部分就是问题所在:
Where hasta_id='@hastaid'
这不是使用参数,而是搜索hasta_id的值正好是字符串@hastaid的行,因为您将它放在了字符串文本中。你需要去掉引号:
Where hasta_id=@hastaid
然后它将查找hasta_id的值与参数@hastaid的值匹配的行。确实如此。SQL参数已经完成了作为字符串文本的标识。这是我们使用它们的一个重要原因——没有类型歧义。引号作为一种原始的、容易破坏的保护措施,对于使用strong-Connaction的SQL注入来说是有意义的,但是你正在超越它。我在这方面还有另一个问题。字符串sql=SELECT*FROM@dbname.ananmez_genel,其中hasta_id=@hastaid;我尝试设置类似dbname的参数,但返回在命令执行期间遇到的致命错误。错误。@kamilkunt:您不能将DB或TableName作为参数。SQL根本不支持这一点。对于这部分,您必须使用字符串操作。请注意,应该保存开关/大小写块中的字符串操作。只要用户没有手动输入它,它就是保存。@kamilkunt:不,不能对数据库、表或列名等使用参数。它们代表价值观。我还能为安全做些什么@克里斯托弗
Where hasta_id=@hastaid