从SQL中检索名称 - 意外错误“无法将int转换为字符串”

时间:2013-12-01 16:40:22

标签: c# sql-server

我正在尝试获取添加db中最后一条记录的用户的名称。 查询是正确的,但我得到错误“无法将类型转换为int”到“string”。数据库中的数据类型是varchar。 我做错了什么?

  protected void LastProject()
     {
         string lastProjUser = "SELECT name FROM Users WHERE uname = (SELECT MAX(id) FROM Projects)";
         string getconnstring = ConfigurationManager.ConnectionStrings["stad_conn"].ConnectionString;
         SqlConnection conn = new SqlConnection(getconnstring);
         using (SqlCommand lastProjUserName
         = new SqlCommand(lastProjUser, conn))
         {
             conn.Open();
             lastProjUserName.CommandType = CommandType.Text;
             string name = (string)lastProjUserName.ExecuteNonQuery();  //ERROR IS HERE
             Label3.Text = name;
             conn.Close();
         }
     }

更新 来自最高“id”的表“项目”我需要知道“uname” 表“用户”我需要与“用户名”相关联的“名称”,这是“项目”表中的uname

表项目:

[id]                       INT             IDENTITY (1, 1) NOT NULL,
[proj_id]                  VARCHAR (20)    NULL,
[proj_prod_id]             VARCHAR (20)    NULL,
[uname]                    VARCHAR (50)    NULL,

表用户

[id]        INT           IDENTITY (1, 1) NOT NULL,
[name]      VARCHAR (50)  NULL,
[username]  VARCHAR (50)  NULL,
[pass]      VARCHAR (50)  NULL,

5 个答案:

答案 0 :(得分:2)

您正在将名称字段与ID字段进行比较,您的意思是这样做吗?

答案 1 :(得分:2)

您的数据库架构设计非常糟糕,但如果您遇到困难,可以尝试:

SELECT uname FROM Projects WHERE id IN (SELECT MAX(id) FROM Projects)

答案 2 :(得分:1)

SQL语句应为

SELECT name
FROM Users
WHERE id = (SELECT MAX(id) FROM Projects)

WHERE id = ...代替WHERE name = ...)。


ExecuteNonQuery返回受影响的记录数。这不是你想要的。请改用ExecuteScalar

string name = (string)lastProjUserName.ExecuteScalar();

ExecuteScalar返回查询返回的第一行的第一列。


<强>更新

如果我考虑到您的最新修改,我会得到:

SELECT
    u.name
FROM
    Users u
    INNER JOIN Projects p
        ON u.username = p.uname
WHERE
    p.id = (SELECT MAX(id) FROM Projects)

答案 3 :(得分:0)

1。考虑更改您的查询,因为将id列(int)与name列(varchar)进行比较无效不符合你的目的。
2。在运行ExecuteReader()查询时,您需要致电ExecuteNonQuery()而不是Select

        SqlDataReader reader=lastProjUserName.ExecuteReader();
        if(reader.Read())
        string name = reader["name"].ToString();

3。如果id表中有users列,并且projectsid列使用{{1} }&amp;您可以在primary key

之后使用foreign key关系
query

完整代码:

"SELECT name FROM Users WHERE id= (SELECT MAX(id) FROM Projects)";

答案 4 :(得分:0)

像这样更改lastProjUser:

"SELECT name FROM Users WHERE Id = (SELECT MAX(id) FROM Projects)"