如何在 C# 代码中添加数据库字段,而不在断开连接的体系结构中使用存储过程

本文关键字:断开 连接 体系结构 存储过程 代码 添加 数据库 字段 | 更新日期: 2023-09-27 18:33:53

>我需要在其中创建登录页面 asp.net,其中我必须创建 3 个用户访问级别,例如

可以查看那里的电子邮件和更新的用户可以查看电子邮件、更新并删除某些用户的超级用户管理员,也可以查看所有和删除超级用户。

我的登录页面有用户名密码和登录按钮

当用户/管理员/超级用户单击按钮时,它应该根据用户级别自动重定向他。

我有一个用户名,密码,用户ID,用户访问类型,电子邮件的数据库。我在这里的问题是我不知道如何在断开连接的数据库体系结构中基于 UserAccessType 编写 if 命令,也不使用存储过程。

 String Uid = TextBox1.Text;
 String Pwd = TextBox2.Text;
 SqlConnection con = new SqlConnection(@"Data Source=Sun-PC'SQLEXPRESS;Initial Catalog=dts;Persist Security Info=True;User ID=sa;Password=********;");
 SqlDataAdapter da;
 da = new SqlDataAdapter("Select userid,password,useraccesstype from Table2 WHERE userid = " + Uid + " and password ='" + Pwd + "'", con);
 DataSet ds = new DataSet("Table2");
 da.Fill(ds, "Table2");
 if (Uid == "userid" && Pwd == "password")
 {
     if (uzrtype3 = "componentadmin")
     {
         Response.Redirect("userpage.aspx");
     }
     if (uzrtype = "user")
     {
         Response.Redirect("register.aspx");
     }
 }
 else
 {
     Label123.Text = "Sorry, user not recognized - please try again";
 }

如何在 C# 代码中添加数据库字段,而不在断开连接的体系结构中使用存储过程

阅读字里行间,我想你在问"如何获取用户访问类型"?如果是当前代码,也许是:

if(ds.Tables[0].Rows.Count == 1) {
    // match
    var accessType = ({appropriate cast here})ds.Tables[0].Rows[0]["useraccesstype"];
} else {
    // no match
}

然而!我会以不同的方式做,解决各种参数问题并使其更安全 - 为了方便起见,使用"dapper-dot-net"(谷歌它):

string userid = ....
string password = ...
var row = con.Query(
   "Select useraccesstype from Table2 WHERE userid = @userid and password = @password",
   new { userid, password }).FirstOrDefault();
if(row == null) {
    // no match
} else {
    var accessType = ({some cast here})row.useraccesstype;
}

密码的加盐散列也是您应该研究的事情。

返回用户ID/密码没有意义:您已经知道这些。您也可以使用 ExecuteScalar,但随后您需要自己处理参数。