【问题标题】:C# SQL Query and apostrophe's [duplicate]C# SQL 查询和撇号的 [重复]
【发布时间】:2012-11-30 17:38:56
【问题描述】:

可能重复:
SqlDataReader parameter not working

我正在尝试从文本框中获取 pc 名称到 windows 窗体应用程序中的 sql 参数。 当我输入如下参数时,它工作正常。

                string query = @"select stationipaddress from station where stationname = @Name";
                using (SqlCommand cmd = new SqlCommand(query, cs))
            {


               SqlParameter param = new SqlParameter();
                param.ParameterName = "@Name";
                param.Value = "demo";
                cmd.Parameters.Add(param);

                using (SqlDataReader dr = cmd.ExecuteReader())
                {

                    while (dr.Read())
                    {
                        label3.Text = dr.GetSqlValue(0).ToString();
                        results = dr.GetValue(0).ToString();
                        MessageBox.Show(dr.GetValue(0).ToString());
                        MessageBox.Show(results);
                    }

但是当我尝试从文本框中获取数据时它什么也没做。

 string query = @"select stationipaddress from station where stationname = @Name";
            using (SqlCommand cmd = new SqlCommand(query, cs))
            {


                  SqlParameter param = new SqlParameter();
                param.ParameterName = "@Name";
                param.Value = textBox1.Text;
                cmd.Parameters.Add(param);

                using (SqlDataReader dr = cmd.ExecuteReader())
                {

                    while (dr.Read())
                    {
                        label3.Text = dr.GetSqlValue(0).ToString();
                        results = dr.GetValue(0).ToString();
                        MessageBox.Show(dr.GetValue(0).ToString());
                        MessageBox.Show(results);
                    }

【问题讨论】:

标签: c# sql sqldatareader


【解决方案1】:

我建议在从数据库中检索结果之前移出所有 MessageBox 操作。将结果添加到强类型列表中,然后相应地显示消息。

【讨论】:

    【解决方案2】:

    尝试使用双撇号,例如 '' -> "John's" --> "John's"

    【讨论】:

    • 我这样做了:''@StationName'',它在 '@StationName' 附近说语法不正确
    • 在您的问题中添加整个异常。
    【解决方案3】:

    调用AddWithValue 后,设置参数的DbType。那应该正确引用您的字符串。

    cmd.Parameters["@StationName"].SqlDbType = SqlDbType.NVarChar;
    

    编辑:对不起,我的意思是指定 SqlDbType

    【讨论】:

    • 当我这样做时,我得到以下错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句
    • 我已经更新了上面的代码
    【解决方案4】:

    你为什么不去掉撇号,即

    cmd.Parameters.AddWithValue("@StationName", textBox1.Text.Replace("'","")
    

    如果 StationName 中的数据库字段值包含撇号,那么您必须将 SQL 语句更改为:

    select stationipaddress from station where replace(stationname,CHAR(39),'') = @StationName
    

    【讨论】:

    • 查询应该只写@StationName 还是'@StationName'?
    • 我不明白原来的问题。撇号是数据库字段 (Station.StationName) 还是它们在文本框 (textbox1.text) 中还是两者都在?
    • 为了从数据库中取回结果,它必须是这样的:where stationname = 'stationname',这就是为什么我无法取回任何结果
    • 在这种情况下,将您的 SQL 语句更改为: select stationipaddress from station where StationName = char(39) + @StationName + char(39)
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2013-02-18
    • 2015-12-20
    • 2018-03-17
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多