C# 似乎无法使DataReader在C/SQL Server中工作

C# 似乎无法使DataReader在C/SQL Server中工作,c#,sql-server,C#,Sql Server,我有以下代码: string strConnect = "Server=DESKTOP-2Q73COU\\SQLEXPRESS;Database=LoginApp;Trusted_Connection=True;"; SqlConnection conn = new SqlConnection(strConnect); conn.Open(); MessageBox.Show("Connected to SSMS."); string loadMainInfo = "SELECT * FRO

我有以下代码:

string strConnect = "Server=DESKTOP-2Q73COU\\SQLEXPRESS;Database=LoginApp;Trusted_Connection=True;";
SqlConnection conn = new SqlConnection(strConnect);
conn.Open();

MessageBox.Show("Connected to SSMS.");

string loadMainInfo = "SELECT * FROM Main_Information WHERE Username = " + Globals.username;

SqlCommand cmd = new SqlCommand(loadMainInfo, conn);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())
{
    lblStanding.Text = (dr["Standing"].ToString());
    lblName.Text = (dr["First Name"].ToString()) + " " + (dr["Last Name"].ToString());
    lblTotalHours.Text = (dr["Total_hours"].ToString());
    lblType.Text = (dr["Degree_type"].ToString());
    lblDegree.Text = (dr["Degree"].ToString());
    lblCurrentHours.Text = (dr["Current_hours"].ToString());
}
具体而言,这一行:

string loadMainInfo = "SELECT * FROM Main_Information WHERE Username = " + Globals.username;
如果我将该行的结尾替换为:

Username = testuser"
代码可以正常工作,下面的所有标签都将使用Username=testuser表格中的相应信息填充。但是,如果用户使用用户名登录,并且代码使用的是原始行,则会出现以下错误:

System.Data.SqlClient.SqlException:“=”附近的语法不正确。”


有什么帮助吗?

如果您的查询错误,请按以下方式添加报价

string loadMainInfo = "SELECT * FROM Main_Information WHERE Username = '" + Globals.username + "'";

您可以使用String.Format

string loadMainInfo = String.Format(“SELECT * FROM Main_Information WHERE Username = {0}" ,Globals.username);
当您在查询字符串中引用Globals.username时,它可能没有值,因为当查询中的=后面没有任何内容时,就会出现SQL错误

我建议在设置loadMainInfo之后使用调试器查看其值,或者添加MessageBox.ShowloadMainInfo行;下面


查询字符串是否包含您期望的用户名值?

使用SqlParameter执行以下操作:

string loadMainInfo = "SELECT * FROM Main_Information WHERE Username = @paramName"'; 
SqlParameter param1 = new SqlParameter () ; 
param1.ParameterName="@paramName";
param1.SqlDbType= SqlDbType.Varchar;
param1.Value= Globals.username;
cmd.Parameters.Add(param1);

您应该让您的生活更轻松,使用参数而不是字符串连接。它不仅可以为您正确地转义和引用内容,还可以防止潜在的SQL注入。吹毛求疵:您没有连接到SSM-这只是一个GUI前端工具。你正在连接的是SQL Server数据库引擎Bobby小表去这所学校了吗?虽然这可能是预期的代码函数的答案,但使用字符串连接来构造SQL查询是一种非常糟糕的做法;SqlParameter param1=新的SqlParameter;param1.ParameterName=@paramName param1.SqlDbType=SqlDbType.Varchar;param1.Value=Globals.username;cmd.Parameters.Addparam1;你应该这样回答。