我有一个销售页面,用户可以在其中搜索并显示其客户的记录。我有多个用户打算使用此页面。我的问题是如何以一种方式创建页面,当用户登录时,它只会通过他或她的Userid显示用户的记录。
我在下面应用了您的示例:
if(!IsPostBack)
{
Session["UserId"] = User.Identity.Name;
// using (var connection = new SqlConnection("mtbase"))
{
string value = null;
if (HttpContext.Current.User != null)
{
value = HttpContext.Current.User.Identity.Name;
}
else
{
value = HttpContext.Current.Request.LogonUserIdentity.Name;
}
var split = value.Split(new char[] { '\\' });
var UserId = split[split.Length - 1];
using (var cmd = new SqlCommand("SELECT * FROM FixPrice WHERE UserId=@UserId", new SqlConnection("mtbase")))
{
// Add your parameter before opening the connection
cmd.Parameters.AddWithValue("@UserId", UserId);
// Open connection
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader())
{
}
cmd.Connection.Close();
}
}
}
}
我的数据库表:
表名FixPrice
Id int(PRIMARY KEY)
日期数据时间
Admin nvarchar
类别nvarchar
品牌varchar
价钱
数量浮动
总结钱
UserId int(FOREIGN KEY)
我仍然得到同样的错误:
初始化字符串的格式不符合从索引0开始的规范。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:初始化字符串的格式不符合从索引0开始的规范。
来源错误:
第31行:var split = value.Split(new char [] {' \'}); 第32行:var UserId = split [split.Length - 1]; 第33行:使用(var cmd = new SqlCommand(" SELECT * FROM FixPrice WHERE UserId = @ UserId&#34 ;, new SqlConnection(" Skyformatbase"))) 第34行:{ 第35行://在打开连接之前添加参数
源文件:c:\ Users \ migold \ Documents \ Visual Studio 2013 \ WebSites \ SKYAPP \ DashBoard.aspx.cs Line:33
答案 0 :(得分:1)
让我们首先关注这一点:
var query = "SELECT * FROM FixPrice WHERE UserName @Username";
using (var command = new SqlCommand(query, connection))
{
// Open connection
connection.Open();
// Add your parameter
command.Parameters.AddWithValue("@Username", User.Identity.Name);
using (var reader = command.ExecuteReader())
您的SQL需要说SELECT * FROM FixPrice WHERE UserName=@Username;
您不使用 =(等于)符号。
接下来,您正在阅读用户的名称,而不是用户的用户名。
然后,当然,你没有在任何地方关闭你的连接。它可以用这种形式简化:
string value = null;
if (HttpContext.Current.User != null) {
value = HttpContext.Current.User.Identity.Name;
} else {
value = HttpContext.Current.Request.LogonUserIdentity.Name;
}
var split = value.Split(new char[] { '\\' });
var userName = split[split.Length - 1];
using (var cmd = new SqlCommand("SELECT * FROM FixPrice WHERE UserName=@UserName", new SqlConnection("mtbase")))
{
// Add your parameter before opening the connection
cmd.Parameters.AddWithValue("@UserName", userName);
// Open connection
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader()) {
...
}
cmd.Connection.Close();
}
我希望这有助于您走上正轨。
答案 1 :(得分:-1)
您可以将所有代码放在该页面的page_load事件中。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Response.Write("<br>Page has been loaded first time.");
//Read the user ID from session , asp.net membership or identity.
// call database functions to read the record respect to that user and bind the
list view , grid
}
}