2011-11-24 43 views
1

我的VS2005 C#服务器端编码中有一个sql select语句用于Web应用程序,并且遇到一些错误。SQL Select从网页控件中选择语句并根据结果检查相关复选框

下面是在网页中的控件的屏幕截图: enter image description here


数据源SqlDataSource1:查询:SELECT [Name] FROM [Users]

DROPDOWNLISTUserNameList:列出了从SqlDataSource1检索到的所有userName

复选框AdminCbUserCb:自动检查,如果userNameuserType是。

按钮loadUser:获取用户类型并相应地选中复选框。


下面是我为我的loadUser代码按钮

SqlConnection conn = new SqlConnection("Data Source=DATASOURCE"); 
    string sql = string.Format("SELECT [User Type] FROM [Users] where Name like " + UserNameList.Text); 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

    if(sql== "Administrator"){ 
     AdminCb.Checked=true; 
    } 
    if(sql== "User"){ 
     UserCb.Checked=true; 
    } 

目前我坚持错误(是用户的名字的第二个字):

enter image description here


问题:

1)怎样才能改变我的SQL查询,以便它可以在超过1个字吗?

2)一旦我能够运行我的sql查询,我将能够检查框?

谢谢。

回答

1

您必须使用Parameter并调用ExecuteScalar()方法而不是ExecuteNonQuery()

string sql = "SELECT [User Type] FROM [Users] where [Name][email protected]"; 
SqlCommand cmd = new SqlCommand(sql, conn); 
cmd.Parameters.Add("@Name",SqlDbType.VarChar,50).Value=UserNameList.Text; 
conn.Open(); 
Object result=cmd.ExecuteScalar(); 
conn.Close(); 

if(result!=null) 
    { 
    string usertype=result.ToString(); 
    if(usertype=="Administrator") 
     {} 
    else 
     {} 
    } 

在情况下,如果结果从数据库返回包含超过一个rows然后使用ExecuteReader()方法。

string sql = "SELECT [User Type] FROM [Users] where [Name] like @Name"; 
SqlCommand cmd = new SqlCommand(sql, conn); 
cmd.Parameters.Add("@Name",SqlDbType.VarChar,50).Value="%" + UserNameList.Text + "%"; 
conn.Open(); 
SqlDataReader result=cmd.ExecuteReader(); 
while(result.Read()) 
{ 
    /// 
    } 
result.Close(); 
conn.Close(); 
+0

感谢您的帮助。现在我的网页现在没有任何错误。但有没有什么办法可以将变量* sql *存储到字符串变量中以确保“用户类型”已成功检索? – gymcode

+0

你想存储返回的结果吗?如果您想通过网络应用使用会话,请使用会话。 – adatapost

+0

我只想检查结果是'管理员'或'用户',并且只会有一个返回的记录,所以它只是一个简单的检查,看看SQL存储'管理员'或'用户',以及如果它是管理员,请检查管理员复选框,如果是用户,请选中用户复选框。 – gymcode

0

由于您连接了SQL字符串,如果输入本身中有单引号,它认为这是输入的结尾,而持续输入是SQL语句,这就是为什么您可能会得到该错误。

切换到使用参数,或确保任何单引号转义为一对单引号的,如:

string sql = string.Format("SELECT [User Type] FROM [Users] where Name like " + UserNameList.Text.Replace("'", "''")); 
0

由于错误表明有一些错误的名字,我会采取在这条线仔细一看:

string sql = string.Format("SELECT [User Type] FROM [Users] where Name like " + UserNameList.Text); 

如果您正在使用string.Format,你还不如使用

string sql = string.Format("SELECT [User Type] FROM [USERS] where Name like {0}", UserNameList.Text);