【问题标题】:c# stripping characters from string when submitting to databasec# 提交到数据库时从字符串中剥离字符
【发布时间】:2015-01-13 20:20:22
【问题描述】:

我目前正在做一个项目,我需要向数据库提交文件路径,并且还能够从数据库中提取该路径。

目前我能够提交到数据库的路径并从数据库中提取数据,但是当我提交到数据库时,路径中的斜杠似乎被从字符串中剥离。

如何在提交到数据库和从数据库中提取时阻止 \ 被剥离?

这是我的保存按钮事件代码:

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

提前致谢(我是 C# 中使用 MySQL 数据库的新手,我的 C# 也很生疏)

【问题讨论】:

  • 你应该构造一个参数化查询而不是字符串连接。
  • 队列 SQL 注入讨论。参数化你的语句。 stackoverflow.com/questions/652978/…
  • 使用参数而不是查询中的文本框文本
  • '\' 是 c# 中的转义字符。我不确定它如何与连接字符串一起工作,但如果您要对 Query 进行硬编码以插入一条记录,则 \ 字符需要自行转义。例如:string Query = "insert into ephex_contcollections.Paths (toindex,indexed) values ('Home','C:\\Users\\Home')"

标签: c# mysql database visual-studio


【解决方案1】:

您应该使用SQL Parameters,但如果您想快速解决这个问题,请在路径中添加双斜杠,这样输出将是:C:\\Users\\Meta\\Desktop\\Alpha

string Query = "insert into ephex_contcollections.Paths (toindex,indexed) values('" + this.txtToIndexPath.Text.Replace(@"\" , @"\\") + "','" + this.txtIndexedPath.Text.Replace(@"\" , @"\\") + "') ;";

【讨论】:

  • 谢谢!我已经在几个地方进行了调整(提交和提取数据),我正在开发的程序是为我工作的办公室而设计的,只有 3 个人(首席执行官、首席运营官和我自己)可以访问该程序,所以我应该很好用这个方法。
  • 无论谁访问您的应用程序,都使用 Sql 参数。如果 CEO 有一个了解安全性的伙伴,他会测试您的应用程序以查看它是否容易受到 Sql Injection 的影响。
  • 始终使用 Sql 参数。总是。在实践中不这样做会导致你在更重要的时候不这样做。现在就养成好习惯,而不是在违反之后……
【解决方案2】:

您遇到的问题是,即使在字符串中使用斜线,也意味着什么。

您需要像这样在字符串中使用特殊字符作为反斜杠

“你好\\世界”=“你好\世界”

另外,你可以在字符串前面使用@符号来不使用转义字符,但我不推荐它,比如这个字符串 s = @ "hello \ world" = " hello \ world"。

希望对您有所帮助。

edit : stackoverflow 一直在编辑我的反斜杠

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2010-09-19
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多