【问题标题】:passing " from c# to sql server将 " 从 c# 传递到 sql server
【发布时间】:2012-03-01 01:10:17
【问题描述】:

我正在尝试使用

将包含字符 " 从 c# 传递到 sql server 的脚本
thisCommand.ExecuteNonQuery();

问题是字符串在字符串内部表示为\"而不是":

thisCommand.CommandText = SQLscript; (string SQLScript)

如何将所有“字符”转换为“\”,以便在 sql 中只得到“?”

感谢您的建议 阅读脚本:

StreamReader s = new StreamReader("export_script.sql");
this.SQLscript = s.ReadToEnd();

执行脚本:

thisCommand.CommandText = SQLscript;
thisCommand.ExecuteNonQuery();

在脚本里面我有类似的东西:

set @cmd = 'bcp "'+ @cmd_select + '" queryout "' + @partname + '" -c -S ' + @@SERVERNAME 

你可以看到我使用 " 表示 bcp 命令

【问题讨论】:

  • 请展示您现在的工作方式(即您的SQLscript 中的文字是什么)。
  • 永远不要在 sql 字符串中传递数据。始终使用SqlCommandSqlParameter(破纪录...)
  • 如果斜线 \ 不在您的 export_script.sql 文件中,它也不应该在 CommandText 中。您在调试器中看到斜线 \ 了吗?..
  • @atornblad 你能详细说明你的答案吗?

标签: c# sql-server .net-3.5


【解决方案1】:

为此使用 SQL 参数。它会为你完成这项工作 - 无需逃避任何危险的角色

这是一个例子

        SqlConnection mySqlConnection = new SqlConnection("server=localhost;database=Northwind;uid=sa;pwd=sa");
        mySqlConnection.Open();
        SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
        mySqlCommand.CommandText =
          "INSERT INTO Customers (" +
          "  CustomerID, CompanyName, ContactName" +
          ") VALUES (" +
          "  @CustomerID, @CompanyName, @ContactName" +
          ")";
        mySqlCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5);
        mySqlCommand.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40);
        mySqlCommand.Parameters.Add("@ContactName", SqlDbType.NVarChar, 30);
        mySqlCommand.Parameters["@CustomerID"].Value = "J4COM";
        // The company name contains two double-quotes (") for demo purposes
        mySqlCommand.Parameters["@CompanyName"].Value = "J4 \"Company\"";
        mySqlCommand.Parameters["@ContactName"].IsNullable = true;
        mySqlCommand.Parameters["@ContactName"].Value = DBNull.Value;
        mySqlCommand.ExecuteNonQuery();
        Console.WriteLine("Successfully added row to Customers table");

        mySqlConnection.Close();
    }
}

【讨论】:

  • 冒昧地在示例代码中添加了几个反斜杠字符,仅用于示例目的。这里主要是正确使用命令和参数的原则。永远不要编写自己的最终 sql,而是使用命名参数并让 MySql 适配器完成工作。
【解决方案2】:

其实我通过添加解决了这个问题

thisCommand.CommandType = CommandType.Text;

如果我使用这种类型的命令,则命令发送到 SQL 时," 前面不带 \。

【讨论】:

    【解决方案3】:

    也许Regex.Unescape-方法可以帮助你?希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      如果要在字符串文字中表示双引号,则转义序列是两个双引号。

      string myString = @"";

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        • 2023-01-13
        相关资源
        最近更新 更多