C# 转换sql server db中包含控件的会话值时出现问题

C# 转换sql server db中包含控件的会话值时出现问题,c#,asp.net,session,parameters,C#,Asp.net,Session,Parameters,这是我的问题,在我登录时,我填写了两个会话,一个是公司名称,一个是用户名。使用这两个会话,我希望在数据库中找到相应的ID。但是,正如您所猜测的,会话和ID的数据类型不一样,所以我估计需要进行一些转换。所以基本上我要做的是将会话中文本对应的ID保存到一个表中 这是我目前正在使用的代码,但在我尝试保存订单时出现了一个错误 System.Data.SqlClient.SqlCommand myCommand1 = new System.Data.SqlClient.SqlCommand("SELECT

这是我的问题,在我登录时,我填写了两个会话,一个是公司名称,一个是用户名。使用这两个会话,我希望在数据库中找到相应的ID。但是,正如您所猜测的,会话和ID的数据类型不一样,所以我估计需要进行一些转换。所以基本上我要做的是将会话中文本对应的ID保存到一个表中

这是我目前正在使用的代码,但在我尝试保存订单时出现了一个错误

System.Data.SqlClient.SqlCommand myCommand1 = new System.Data.SqlClient.SqlCommand("SELECT tUserId FROM tblUsers WHERE tUserName=@Username", sqlConn);
                myCommand1.Parameters.AddWithValue("@Username", (string)Session["username"]);
                myCommand1.ExecuteNonQuery();
                int user = Convert.ToInt32(myCommand1.ToString());

                System.Data.SqlClient.SqlCommand myCommand2 = new System.Data.SqlClient.SqlCommand("SELECT tCompId FROM tblCompany WHERE tCompName=@company", sqlConn);
                myCommand2.Parameters.AddWithValue("@company", (string)Session["compNameLogin"]);
                myCommand2.ExecuteNonQuery();
                int comp = Convert.ToInt32(myCommand2.ToString());

                System.Data.SqlClient.SqlCommand myCommand3 = new System.Data.SqlClient.SqlCommand("INSERT INTO tblOrder(tBestCompId, tBestUserId ) VALUES('" + comp + "','" + user + "') ", sqlConn);
                myCommand3.ExecuteNonQuery();
System.FormatException:输入字符串的格式不正确。在System.Convert.ToInt32(字符串s、NumberStyles样式、NumberBuffer&Number、NumberFormatInfo信息、布尔parseDecimal)的System.Number.StringTonNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo、布尔parseDecimal)处

这就是我遇到的错误

如果有人能帮我找到正确的方向,或者给我一些提示,说明我做错了什么,或者其他方法。请随意发表你的建议


提前感谢。

您要做的是从数据库中检索单个数据。使用:

将返回受影响的行数。将
myCommand2.ToString()
转换为
int
肯定不会起作用,因为
myCommand2
不会存储您的结果(我们不知道将
ToString()
应用到它的结果是什么,这通常是对对象的简要描述)

第二种解决方案: 您可以将代码替换为只需要一个请求的以下内容:

string insertQuery = 
@"INSERT INTO tblOrder(tBestCompId, tBestUserId )
 SELECT U.tUserId, T.tblCompany
   FROM (SELECT tUserId FROM tblUsers WHERE tUserName=@Username) U,
        (SELECT tCompId FROM tblCompany WHERE tCompName=@company) T";


System.Data.SqlClient.SqlCommand myCommand
     = new System.Data.SqlClient.SqlCommand(insertQuery, sqlConn);
myCommand.Parameters.AddWithValue("@Username", (string)Session["username"]);
myCommand.Parameters.AddWithValue("@company", (string)Session["compNameLogin"]);
int affectedRows = myCommand1.ExecuteNonQuery();

// affectedRows will contain the number of inserted rows (which is 1)

您好,感谢您的回复,但我仍然在第行收到一个错误:
int user=(int)myCommand1.ExecuteScalar()错误显示:指定的强制转换无效。在Project.MemberPages.Product.ButtonB_单击(对象发送者,事件参数e)可以在那里设置断点并检查
myCommand1.ExecuteScalar()
?可以尝试使用
int user=
Convert.ToInt32(myCommand1.ExecuteScalar())
?(顺便问一下,
tUserId`&
tCompId
的数据类型(在数据库中)是什么?是的,这非常有效,只需添加Convert.ToInt32..他们的数据类型是数字。顺便说一句,非常感谢您的帮助。
string insertQuery = 
@"INSERT INTO tblOrder(tBestCompId, tBestUserId )
 SELECT U.tUserId, T.tblCompany
   FROM (SELECT tUserId FROM tblUsers WHERE tUserName=@Username) U,
        (SELECT tCompId FROM tblCompany WHERE tCompName=@company) T";


System.Data.SqlClient.SqlCommand myCommand
     = new System.Data.SqlClient.SqlCommand(insertQuery, sqlConn);
myCommand.Parameters.AddWithValue("@Username", (string)Session["username"]);
myCommand.Parameters.AddWithValue("@company", (string)Session["compNameLogin"]);
int affectedRows = myCommand1.ExecuteNonQuery();

// affectedRows will contain the number of inserted rows (which is 1)