Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# c参数化查询不返回数据/空值_C#_Mysql_.net - Fatal编程技术网

C# c参数化查询不返回数据/空值

C# c参数化查询不返回数据/空值,c#,mysql,.net,C#,Mysql,.net,使用mysql,我尝试使用参数化查询获取/设置数据,但其中一些返回null,尽管它们在不使用参数化查询的情况下工作。以下是我遇到的两个问题: 这一个在数据库中不返回任何内容: // csvFolder looks ridiculous but this is actually way it needs to look like to work string csvFolder = "C:\\\\\\\\Users\\\\\\\\fakename\\\\\\\\Desktop\\\\\\\\csv

使用mysql,我尝试使用参数化查询获取/设置数据,但其中一些返回null,尽管它们在不使用参数化查询的情况下工作。以下是我遇到的两个问题:

这一个在数据库中不返回任何内容:

// csvFolder looks ridiculous but this is actually way it needs to look like to work
string csvFolder = "C:\\\\\\\\Users\\\\\\\\fakename\\\\\\\\Desktop\\\\\\\\csvScanner\\\\\\\\testeappfolder"
MySqlCommand deleteCheck = new MySqlCommand("SELECT * FROM email_list WHERE filepath LIKE '%@csvfolder%' AND expired IS NULL", conn);
deleteCheck.Parameters.AddWithValue("@csvfolder", csvFolder);
MySqlDataReader deleteRdr = deleteCheck.ExecuteReader();
但是,将中的值串联起来将起作用:

MySqlCommand deleteCheck = new MySqlCommand("SELECT * FROM email_list WHERE filepath LIKE '%" + csvFolder + "%' AND expired IS NULL", conn);
MySqlDataReader deleteRdr = deleteCheck.ExecuteReader();
这个函数从ExecuteScalar返回null

MySqlCommand getId = new MySqlCommand("SELECT * FROM email_list WHERE filepath = '@filepath' ORDER BY expired DESC LIMIT 1", conn);
getId.Parameters.AddWithValue("@filepath", deletedPath.Replace(@"\", "\\\\"));
int id = int.Parse(getId.ExecuteScalar().ToString());
但在连接时也可以正常工作


我相信这一定是因为我所走过的道路引起了各种各样的奇怪,但我不能确切地看到它是什么。我还有许多其他参数化的路径查询可以正常工作,但这两个查询不起作用。以前任何人都会看到类似的情况,因为您的参数在查询的引用部分,所以它不会被视为参数,而是被视为您正在搜索的文本字符串。你需要像这样连接它

MySqlCommand deleteCheck = new MySqlCommand(
    "SELECT * FROM email_list WHERE filepath LIKE '%'+@csvfolder+'%' AND expired IS NULL", conn);
类似于ExecuteScalar示例:

其他提示:

MySqlCommand和MySqlDataReader都是IDisposable的,所以它们都应该位于一个using块中。 您可以使用文字字符串使字符串更容易理解:string csvFolder=@C:\\\\Users\\\\fakename\\\\Desktop\\\\csvScanner\\\\testeappfolder这看起来仍然不正确,但它与您给定的值相等。 你可能想读书。 使用ExecuteScalar选择*只使用第一行中的第一个值,将来可能会中断:选择要使用的特定列更安全。 当值显示为根路径时,您使用LIKE查找包含参数的值。如果该值以该值开头,请删除初始通配符。
对于第一个查询,我不认为可以在LIKE子句中使用参数,至少不能这样。参考此答案:了解您可能如何做到这一点。我尝试使用Concat,但运气不好,谢谢您的提醒,虽然两个答案都返回null:您能否澄清返回null的含义,因为第一个查询是DataReader,第二个查询被放入不可为null的int中。对于第二个,你能确认替换没有干扰你的预期行为吗?谢谢你提供的信息,我将研究重构我的代码
MySqlCommand getId = new MySqlCommand(
    "SELECT * FROM email_list WHERE filepath = @filepath ORDER BY expired DESC LIMIT 1", conn);