尝试做一个记录集,我只想要一列数据,但是这段代码给了我一个错误..我是一个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'。存在显式转换(您是否错过了演员?)
答案 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)
这意味着CustomerName
或CustomerID
不是数据库中的有效列。再次检查你的桌子。
答案 2 :(得分:0)
答案 3 :(得分:0)
尝试执行select * from customer where ...
并在using datareader语句中添加断点。然后使用快速监视datareader对象来调查记录集中公开的列。
或者您可以在您选择的数据库上运行select语句,以确保列名相同。
我同意上面的Madhur,您的列名拼写不正确。或者您没有连接到正确的数据库。
希望这有帮助
答案 4 :(得分:0)
首先,调试并检查以下值:
DB.GetDBConn()
您将验证您在Studio中将使用与在程序中相同的内容。
我认为这是db和你的代码之间的拼写。
一旦超过错误,您需要解决此问题:
{
string CustomerName = "CustomerName";
}
你没有访问读者,尝试某种教程。