System.Data.SqlClient.SqlException:列名无效

时间:2011-09-03 06:16:47

标签: asp.net sql-server

尝试做一个记录集,我只想要一列数据,但是这段代码给了我一个错误..我是一个ASP.NET新手,有人可以帮忙吗?:

  

System.Data.SqlClient.SqlException:列名无效   '客户名称'。

 using (SqlConnection con = new SqlConnection(DB.GetDBConn()))
 {
  con.Open();
  using (IDataReader dr = DB.GetRS("select CustomerName from Customer where CustomerID=" + Customer.CustomerID, con))
   {
       string CustomerName = "CustomerName";                    
   }
 }

 String EncCustomerName = Encrypt(CustomerName.Replace(".", "").Replace("-", ""),"1");

问题2:如何将数据库内容绑定到CustomerName字符串?它似乎只返回“CustomerName”作为CustomerName字符串的值..我希望它返回CustomerName字符串的数据库数据..帮助?

建议使用ExecuteScalar,因此我将请求修改为

   using (var con = new SqlConnection(DB.GetDBConn()))
   using (var cmdContrib = new SqlCommand("SELECT CustomerName FROM Customer WHERE   CustomerID=" + ThisCustomer.CustomerID, con))

   {

        con.Open();
        string CustomerName = cmdContrib.ExecuteScalar();
   } 

我收到此错误: “string CustomerName = cmdCust.ExecuteScalar();”

CS0266:无法将类型'object'隐式转换为'string'。存在显式转换(您是否错过了演员?)

5 个答案:

答案 0 :(得分:2)

回答你的第二个问题:

// Set it here so you can access it outside the scope of the using statement
string CustomerName = "";

using (SqlConnection con = new SqlConnection(DB.GetDBConn()))
{
    con.Open();
    using (IDataReader dr = DB.GetRS("select CustomerName from Customer where CustomerID=" + Customer.CustomerID, con))
    {
        while (dr.Read())
            CustomerName = dr["CustomerName"].ToString();
        }                    
    }
 }

如果您确定只获得一个CustomerName结果,那么使用DataReader有点过分。

SqlCommand.ExecuteScalar示例

string CustomerName = "";

using (SqlConnection con = new SqlConnection(DB.GetDBConn()))
{

    SqlCommand cmd = new SqlCommand("SELECT CustomerName FROM Customer WHERE CustomerID = " + Customer.CustomerID, con);
    cmd.CommandType = CommandType.Text;

    con.Open();

    CustomerName = Convert.ToString(cmd.ExecuteScalar());

}

SqlCommand.ExecuteScalar Method

其他信息

ExecuteScalar返回一个对象,因此您需要将返回的值转换为正确的类型(在本例中为string)。

此外,您应该在使用块之外声明您的CustomerName值(就像我在我的示例中所做的那样) - 否则它将限定为使用块,并且不在它们之外。

答案 1 :(得分:0)

这意味着CustomerNameCustomerID不是数据库中的有效列。再次检查你的桌子。

答案 2 :(得分:0)

  1. 确保您尝试连接正确的数据库。
  2. 请参阅CustomerName列,该列应位于Customer表中。检查拼写

答案 3 :(得分:0)

尝试执行select * from customer where ...并在using datareader语句中添加断点。然后使用快速监视datareader对象来调查记录集中公开的列。

或者您可以在您选择的数据库上运行select语句,以确保列名相同。

我同意上面的Madhur,您的列名拼写不正确。或者您没有连接到正确的数据库。

希望这有帮助

答案 4 :(得分:0)

首先,调试并检查以下值:

DB.GetDBConn()

您将验证您在Studio中将使用与在程序中相同的内容。

我认为这是db和你的代码之间的拼写。

一旦超过错误,您需要解决此问题:

{
       string CustomerName = "CustomerName";                    
   }

你没有访问读者,尝试某种教程。