C#:如何从SQL Server的特定列获取值并存储到变量中

时间:2015-09-06 03:55:37

标签: c# sql sql-server

我想问一下如何将用户的全名(来自数据库@ 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 :(得分:0)

   while (dr.Read())
    {
           string userid=dr["sql_column_name"].ToString();
           //rest of the code...
    }

答案 1 :(得分:0)

Select ID from Login where Username like

使用ID代替*。

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

答案 2 :(得分:0)

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

要获取fullname字段值,您只需使用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"]);