Command.Parameters&撇号

时间:2013-06-19 16:21:56

标签: ado.net

这让我开玩笑!我想我已经尝试了所有的东西,但是无法弄清楚最新情况。更糟糕的是,我无法访问SQL服务器上的SQL事件探查器。

发送给该方法的测试值是'Barrhead Townswomen'的公会收藏'

如您所见,我正在使用替换将单个撇号更改为双精度。我在想这会弄乱SQL!

当我将值传递给命令参数时,我的查询没有返回任何结果。但是,如果我只是将变量直接包含在查询中,它就可以工作。

这是查询(为简洁起见,它已被删除):

public DataTable select_advancedSearch(string collection)
        {
        string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString;
            using (SqlConnection connection = new SqlConnection(cnn))
            {
                string SQL = string.Empty;
                SQL = "SELECT tbl1.ResourceID, tbl1.ItemTitle, tbl1.Type, tbl1.Description, tbl1.CollectionTitle ";
                SQL += "FROM [ercHeritage].[dbo].[ERC_HERITAGE_CORE] tbl1 ";
                SQL += "WHERE tbl1.CollectionTitle LIKE '%'+ @Input1 +'%' ";
                using (SqlCommand command = new SqlCommand(SQL, connection))
                {
                    command.Parameters.Add("@Input1", SqlDbType.NVarChar,255);
                    command.Parameters["@Input1"].Value =  collection.Replace("'", "''").Trim();
                    DataTable MyTable = new DataTable();
                    try
                    {
                        connection.Open();
                        SqlDataAdapter MyAdaptor = new SqlDataAdapter();
                        MyAdaptor.SelectCommand = command;
                        MyAdaptor.Fill(MyTable);
                    }
                    catch (Exception)
                    {
                        System.Web.HttpContext.Current.Response.Write("There was a problem with your request.");
                    }
                    return MyTable;
                }
            }
        } 

任何答案都赞赏!

感谢Alan

1 个答案:

答案 0 :(得分:0)

无需在参数值中转义撇号。如果在命令文本中包含字符串文字,则只能这样做。