我的VS2005 C#服务器端编码中有一个sql select语句用于Web应用程序,我遇到了一些错误。
以下是网页中控件的屏幕截图:
数据源 SqlDataSource1 :查询:SELECT [Name] FROM [Users]
。
下拉列表 UserNameList :列出从userName
检索到的所有SqlDataSource1
。
复选框 AdminCb 和 UserCb :自动检查userType
的{{1}}是否为。
按钮 loadUser :获取用户类型并相应选中复选框。
以下是我的 loadUser 按钮的代码
userName
目前我遇到了错误( Wong 是用户名的第二个字):
问题:
1)如何更改我的Sql查询以便它可以接收超过1个字符?
2)一旦我能够运行我的SQL查询,我能够复选框吗?
谢谢。
答案 0 :(得分:1)
您必须使用Parameter
并调用ExecuteScalar()
方法而不是ExecuteNonQuery()
。
string sql = "SELECT [User Type] FROM [Users] where [Name]=@Name";
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();
答案 1 :(得分:0)
由于你是连接SQL字符串,如果输入本身有一个单引号,它认为这是输入的结尾,继续输入是SQL语句,这就是你可能会收到该错误的原因。
切换到使用参数,或确保将任何单引号转义为一对单引号,例如:
string sql = string.Format("SELECT [User Type] FROM [Users] where Name like " + UserNameList.Text.Replace("'", "''"));
答案 2 :(得分: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);