c#提交到数据库时从字符串中剥离字符
我目前正在从事一个项目,我需要向数据库提交一个文件路径,并能够从数据库中提取该路径 目前,我可以将路径提交到数据库并从数据库中提取数据,但是当我提交到数据库时,路径中的斜杠似乎从字符串中剥离 提交到数据库和从数据库中提取时,如何阻止\被剥离? 以下是我的保存按钮事件代码:c#提交到数据库时从字符串中剥离字符,c#,mysql,database,visual-studio,C#,Mysql,Database,Visual Studio,我目前正在从事一个项目,我需要向数据库提交一个文件路径,并能够从数据库中提取该路径 目前,我可以将路径提交到数据库并从数据库中提取数据,但是当我提交到数据库时,路径中的斜杠似乎从字符串中剥离 提交到数据库和从数据库中提取时,如何阻止\被剥离? 以下是我的保存按钮事件代码: private void btnSaveSettings_Click(object sender, EventArgs e) { string myConnection = "datasource=localhost;
private void btnSaveSettings_Click(object sender, EventArgs e)
{
string myConnection = "datasource=localhost;port=3306;username=username;password=password";
string Query = "insert into ephex_contcollections.Paths (toindex,indexed) values('" + this.txtToIndexPath.Text + "','" + this.txtIndexedPath.Text + "') ;";
MySqlConnection myConn = new MySqlConnection(myConnection);
MySqlCommand cmdDB = new MySqlCommand(Query, myConn);
MySqlDataReader myReader;
try
{
myConn.Open();
myReader = cmdDB.ExecuteReader();
MessageBox.Show("Save Successful");
while (myReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} //close save button event
我提交到数据库的字符串在文本框中如下所示:
C:\Users\Meta\Desktop\Alpha
但是他们像这样提交到数据库:
C:UsersMetaDesktopAlpha
提前感谢(我对使用MySQL数据库和C#还不熟悉,对我的C#也很生疏)。您应该使用,但如果您想快速解决这个问题,请在路径上添加双斜杠,以便输出为:C:\\Users\\Meta\\Desktop\\Alpha
string Query = "insert into ephex_contcollections.Paths (toindex,indexed) values('" + this.txtToIndexPath.Text.Replace(@"\" , @"\\") + "','" + this.txtIndexedPath.Text.Replace(@"\" , @"\\") + "') ;";
您应该使用,但如果您想快速解决此问题,请在路径中添加双斜杠,以便输出为:C:\\Users\\Meta\\Desktop\\Alpha
string Query = "insert into ephex_contcollections.Paths (toindex,indexed) values('" + this.txtToIndexPath.Text.Replace(@"\" , @"\\") + "','" + this.txtIndexedPath.Text.Replace(@"\" , @"\\") + "') ;";
您遇到的问题是,即使在字符串中使用斜杠,也意味着什么 您需要在字符串中使用特殊字符作为反斜杠,如下所示 “hello\\world”=“hello\world” 另外,您可以使用字符串前面的@符号来避免使用转义字符,但我不建议使用它,例如字符串s=@“hello\world”=“hello\world” 希望有帮助
编辑:stackoverflow一直在编辑我的反斜杠您遇到的问题是使用斜杠,即使是在字符串中,也意味着什么 您需要在字符串中使用特殊字符作为反斜杠,如下所示 “hello\\world”=“hello\world” 另外,您可以使用字符串前面的@符号来避免使用转义字符,但我不建议使用它,例如字符串s=@“hello\world”=“hello\world” 希望有帮助
编辑:stackoverflow继续编辑我的反斜杠您应该构造一个参数化查询,而不是字符串连接。队列SQL注入讨论。参数化您的语句。使用参数而不是文本框查询中的文本“\”是c#中的转义字符。我不确定它是如何使用串联字符串的,但如果要硬编码查询以插入单个记录,\字符需要自行转义。例如:string Query=“insert into ephex\u contcollections.path(toindex,indexed)值('Home','C:\\Users\\Home')”您应该构造一个参数化查询,而不是字符串串联。将SQL注入讨论排入队列。参数化您的语句。使用参数而不是文本框查询中的文本“\”是c#中的转义字符。我不确定它是如何使用串联字符串的,但如果要硬编码查询以插入单个记录,\字符需要自行转义。例如:string Query=“insert into ephex\u contcollections.path(toindex,index)值('Home','C:\\Users\\Home')”谢谢!我已经在几个地方(提交和提取数据)采用了这种方法,我正在为我工作的办公室编写程序,只有3个人(CEO、COO和我自己)可以访问该程序,因此我应该很好地使用这种方法。无论谁访问你的应用程序,都要使用Sql参数。如果首席执行官有一个了解安全性的伙伴,他测试你的应用程序,看看它是否容易接受Sql注入,那该怎么办?始终使用Sql参数。总是。如果不把这当作一种实践,那么当它更重要的时候,你就不会这样做。现在就养成好习惯,而不是在违约之后……谢谢!我已经在几个地方(提交和提取数据)采用了这种方法,我正在为我工作的办公室编写程序,只有3个人(CEO、COO和我自己)可以访问该程序,因此我应该很好地使用这种方法。无论谁访问你的应用程序,都要使用Sql参数。如果首席执行官有一个了解安全性的伙伴,他测试你的应用程序,看看它是否容易接受Sql注入,那该怎么办?始终使用Sql参数。总是。如果不把这当作一种实践,那么当它更重要的时候,你就不会这样做。现在就养成好习惯,而不是在违约之后。。。