Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置sql参数_C#_Mysql_Database_Sql Injection_Sqlparameter - Fatal编程技术网

C# 如何设置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

我尝试了使用sql参数的代码,但没有工作,也没有返回任何错误。我怎样才能修好它

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