我正在尝试更新包含以下值的列:
\\localhost\db\kkk\086018\ss\DocA\1_216925.jpg
带
\\localhost\db\kkk\086018\dd\DocA\1_216925.jpg
使用下面的C#代码:
string str = "update my_document " +
"set path = replace (path,'" + fromFolder + "','" + toFolder + "')" +
"where doc_id in( select doc_id from patient_document where folder_id='" + id + "')";
str.Replace("\\", "\\\\");
Console.WriteLine(str);
using (MySqlConnection conn = new MySqlConnection(ECModel.Instance.ConnString))
{
using (MySqlCommand cmd = new MySqlCommand(str, conn))
{
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
我观察到这条路径正确地提交给mysql,但它不会反映出来自C#应用程序和mysql之间,所有\\转换为\。
你介意我建议如何解决我的问题吗?
**我也注意到当我用\\\\运行我的更新语句时它工作正常。
答案 0 :(得分:0)
为了保持这一点,我认为你遇到的问题是你有效地需要" @"和逃避值。尝试这样的事情。它对我有用。我对数据结构做了一些假设,并在SQL Server上测试了这个,而不是MySQL,但我认为这个概念是合理的,我将代码还原为MySQL客户端。
class Program
{
static void Main(string[] args)
{
Program program = new Program();
program.updateTable("1", @"\\share\from\path", @"\\share\to\path");
Console.ReadLine();
}
private void updateTable(string id, string fromFolder, string toFolder)
{
string str = @"update my_document " +
"set path = replace (path,'" + fromFolder + "','" + toFolder + "')" +
"where doc_id in( select doc_id from patient_document where folder_id='" + id + "')";
str.Replace("\\", "\\\\");
Console.WriteLine(str);
using (MySqlConnection conn = new MySqlConnection(ECModel.Instance.ConnString))
{
using (MySqlCommand cmd = new MySqlCommand(str, conn))
{
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}