0

我编写了以下脚本(在 c# 中):

string     sqlCommand = "SELECT   * " +
                 "FROM     tblMatches " +
                 "WHERE matchPlayerNick =" + comboBoxPlayer.Text + " " +
                 "ORDER BY matchName ";

当我运行我的程序时,我得到这个:“标准表达式中的数据类型不匹配”。matchPlayer 的数据类型当然是“文本”。

那么脚本有什么问题呢?

谢谢!

4

2 回答 2

4

你忘记了引号。使用参数化查询,这是一个很好的做法。

于 2013-05-03T14:21:16.670 回答
4
string     sqlCommand = "SELECT   * " +
                 "FROM     tblMatches " +
                 "WHERE matchPlayerNick ='" + comboBoxPlayer.Text + "' " +
                 "ORDER BY matchName ";

但上面的查询很容易受到sql injection. 如果您使用 参数化这些值,则可以防止这种情况发生Command Object and Parameters

试试这个代码片段:

string content = comboBoxPlayer.Text;
string connStr = "connection string here";
string sqlCommand = @"SELECT   *
                      FROM     tblMatches 
                      WHERE matchPlayerNick = @content
                      ORDER BY matchName";
using (SqlConnection conn = new SqlConnection(connStr))
{
    using(SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandText = sqlStatement;
        comm.CommandType = CommandType.Text;

        comm.Parameters.AddWithValue("@content", content);

        try
        {
            conn.Open();
            // other codes here
        }
        catch(SqlException e)
        {
            // do something with the exception
            // do not hide it
            // e.Message.ToString()
        }
    }
}

为了正确编码

  • using用于 propr 对象处理的use语句
  • 使用try-catch块来正确处理对象
于 2013-05-03T14:21:41.000 回答