osh*_*nen 12 c# ado.net asp.net-3.5
我正在尝试从数据库返回一行:
using (connection = new SqlConnection(ConfigurationManager.AppSettings["connection"]))
{
using (command = new SqlCommand(@"select top 1 col_1, col_2 from table1", connection))
{
connection.Open();
using (reader = command.ExecuteReader())
{
reader.Read();
return reader["col_1"];
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
编译器错误消息:CS0266:无法将类型'object'隐式转换为'string'.存在显式转换(您是否缺少演员?)
第90行:返回读者["col_1"];
我确定我犯了一个非常明显的错误,但我似乎无法找到任何单行示例,我发现的所有示例都是使用a的多个返回行while loop.
Mat*_*eld 23
reader["col_1"]回报object.
你想要的东西reader.GetString(reader.GetOrdinal("col_1")).
编辑 - >我只是想在这里添加一个注释,除了其他人提出的问题之外,SELECT TOP没有一个ORDER BY可以根据模式更改和/或旋转木马扫描给出随机结果.
这就是我如何设置(和修复)代码:
using (var connection = new SqlConnection(ConfigurationManager.AppSettings["connection"]))
using (var command = new SqlCommand(@"select top 1 col_1, col_2 from table1", connection))
{
connection.Open();
using (var reader = command.ExecuteReader())
{
if (reader.Read()) // Don't assume we have any rows.
{
int ord = reader.GetOrdinal("col_1");
return reader.GetString(ord); // Handles nulls and empty strings.
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用索引reader[]会给你object类型,这些需要强制转换.然而,我几乎没有触及那种风格,总是喜欢稍微更冗长,但更强大的使用序数,并以强烈的方式要求类型.
如果您只需要第一行第一列中的值,则可以使用ExecuteScalar,再次返回一个可以强制转换且不需要读者的对象:
using (var connection = new SqlConnection(ConfigurationManager.AppSettings["connection"]))
using (var command = new SqlCommand(@"select top 1 col_1, col_2 from table1", connection))
{
connection.Open();
var result = command.ExecuteScalar();
return result == null ? "" : (string)result;
}
Run Code Online (Sandbox Code Playgroud)
问题是返回类型。您所在的方法期望您返回一个字符串,但它reader["col_1"]是一个对象。我建议返回reader["col_1"].ToString()或Convert.ToString(reader["col_1"])。
在我看来,您不需要一行,只需要一个值:
SqlConnection sqlConnection = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
Object returnValue;
cmd.CommandText = "SELECT TOP 1 col_name FROM Customers";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
sqlConnection.Open();
returnValue = cmd.ExecuteScalar();
sqlConnection.Close();
return returnValue.ToString(); //Note you have to cast it to your desired data type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55728 次 |
| 最近记录: |