我想问一下如何将用户的全名(来自数据库@ 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 =二进制图像。我无法发布照片:(>
如果有人也知道如何将二进制文件转换成图片,那将对我有所帮助。
答案 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"]);