一尘不染

来自C#的SQL查询

sql

我正在尝试从C#查询SQL Server数据库

我有课

Class_A 
{
  public fetch((string name, string last_name))
  {
    SqlConnection conn = null;
    double val = 0;
    string server = "123.444.22.sss";
    string dbase = "xyz";
    string userid = "cnsk";
    string password = "xxxxxx";
    string connection = "Data Source=" + server + ";Initial Catalog=" + dbase 
                        + ";User ID=" + userid + ";Password=" + password;

    conn = new SqlConnection(connection);

    try
    {
      conn.Open();
    }
    catch(Exception)
    {
      string e = "Database error contact administrator";
      MessageBox.Show(e, "Error!");
    }
    try
    {
      SqlDataReader myReader = null;
      SqlCommand myCommand = new SqlCommand("select * from table where NAME"
         + " = name and LAST_NAME = last_name", conn);
      myReader = myCommand.ExecuteReader();
      while (myReader.Read())
      {
        //do something

      }
    }
    catch (Exception e)
    {
      Console.WriteLine(e.ToString());
    }
    return (0);
  }
}

我的查询中有问题。

当我给普通查询“从表中选择*”时,这给了我完美的结果。

但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。


阅读 203

收藏
2021-03-10

共1个答案

一尘不染

钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony
Hopkinson的答案),请考虑使用参数化查询。

尝试在where子句中的值周围添加引号,如下所示:

select * from table where NAME = 'name' and LAST_NAME = 'last_name'

在使用变量的情况下,需要添加引号,然后将变量的值连接到字符串中。或者您可以这样使用String.Format

var sql = String.Format("select * from table where [NAME] = '{0}' and LAST_NAME = '{1}'", name, last_name);
SqlCommand myCommand = new SqlCommand(sql);
2021-03-10