【问题标题】:C# : how to get value from specific column from SQL Server and store into variableC#:如何从 SQL Server 的特定列中获取值并存储到变量中
【发布时间】:2015-09-06 03:55:37
【问题描述】:

我想问如何将用户的全名(来自数据库@3)存储到变量fname中。

SqlDataReader rdr = cm.ExecuteReader();
string sql = "Select * from Login where Username like'" + txtUser.Text + "'and password like'" + txtPass.Text + "'";

cm = new SqlCommand(sql, cn);
dr = cm.ExecuteReader();

dr.Read();

if (dr.HasRows)
{
    cn.Close();
    AutoClosingMessageBox.Show("Access Granted. Welcome " + txtUser.Text + "!", "Successfully Login.", 400);

    cn.Open();
    UserID = cm.ExecuteScalar().ToString();

    //fname = ;
    Form1 frmMain = new Form1();
    frmMain.pass(UserID);
    frmMain.Show();
    this.Hide();
    //...
}

我的数据库:@0 = ID,@1 = 用户名,@2 = 密码,@3 = 全名,@4 = 二进制图像。我不能发照片:( >

如果有人也知道如何将二进制文件转换成图片,那将非常感谢。

【问题讨论】:

  • 但@3 是根据相关细节的密码。
  • 我的错,它应该从 @0.. 开始。
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入

标签: c# sql sql-server


【解决方案1】:
   while (dr.Read())
    {
           string userid=dr["sql_column_name"].ToString();
           //rest of the code...
    }

【讨论】:

    【解决方案2】:
    Select ID from Login where Username like
    

    使用 ID 代替 *。

    您可以将二进制读取为字节数组:byte[], 如果您将图像文件保存在数据库中,请使用 system.io.streamwriter 但如果您保存了图像,则可以使用位图类

    【讨论】:

      【解决方案3】:

      首先,最好使用= 运算符来检查查询中的用户名和密码,而不是like

      要获得全名字段值,您可以简单地使用dr 属性,如下所示:

      var fullname = dr["fullname"];
      

      或任何其他字段值:

      var userID = dr["ID"];
      

      cn.close() 之前做这些事情。我不知道你为什么关闭连接并在MessageBox 之后再次打开它! 您的代码的另一个问题是您已经执行了命令,无需再次使用ExecuteScalar() 运行。

      你的代码可能是这样的:

      string sql = string.format("SELECT * FROM Login WHERE Username='{0}' AND Password='{1}'", txtUser.Text, txtPass.Text);
      cm = new SqlCommand(sql, cn);
      var dr = cm.ExecuteReader();
      if (dr.Read()) // Read() returns TRUE if there are records to read, or FALSE if there is nothing
      {
          fname = dr["fullname"];
          UserID = dr["ID"].ToString();
      
          AutoClosingMessageBox.Show("Access Granted. Welcome " + txtUser.Text + "!", "Successfully Login.", 400);
      
          Form1 frmMain = new Form1();
          frmMain.pass(UserID);
          frmMain.Show();
          this.Hide();
          //...
      }
      

      对于您的第二个问题,您可以使用@JensB 所说的这些方法将二进制字段转换为图像,反之亦然:

      public byte[] imageToByteArray(System.Drawing.Image imageIn)
      {
          MemoryStream ms = new MemoryStream();
          imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
          return  ms.ToArray();
      }
      
      public Image byteArrayToImage(byte[] byteArrayIn)
      {
           MemoryStream ms = new MemoryStream(byteArrayIn);
           Image returnImage = Image.FromStream(ms);
           return returnImage;
      }
      

      用法:

      var theImage = byteArrayToImage((byte[])reader.Items["imageBinary"]);
      

      【讨论】:

        猜你喜欢
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多