使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)
Posted
技术标签:
【中文标题】使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)【英文标题】:Retrieving VarChar(MAX) from SQL Server using C# and a stored procedure 【发布时间】:2013-07-10 08:55:16 【问题描述】:我有一个 WebMethod
,它被调用来从 SQL Server 检索 varchar(max)
列。我创建了我需要的存储过程,它在 Management Studio 中运行良好,但是当我运行以下代码时出现错误:
不存在数据时尝试读取无效
代码:
[WebMethod]
public static void PopulatePopUp(string arg)
var str = GlobalStatic.ExceptBlanks(arg);
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Conn"].ConnectionString);
SqlDataReader rdr = null;
using (conn)
using (SqlCommand cmd = new SqlCommand())
conn.Open();
cmd.CommandText = "GetMessage_Sel";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@messageId", SqlDbType.VarChar, -1).Value = str;
cmd.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Connection = conn;
try
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
string fieldValue = rdr.GetString(0);
else
Console.WriteLine("No rows found.");
rdr.Close();
catch (Exception err)
// handle the error
//messageInsert = false;
finally
conn.Close();
【问题讨论】:
可以发一下流程吗? 嗯,你需要在某处拨打rdr.Read()
【参考方案1】:
试试这个
if (rdr.HasRows)
while(rdr.Read())
string fieldValue = rdr[0].ToString();
else
Console.WriteLine("No rows found.");
【讨论】:
小学生错误。多谢你们。更改我的代码以接受阅读(我是白痴)我现在遇到了演员表问题。 Int32 到一个字符串。我的印象是声明中的 -1 是 Varchar(max)【参考方案2】:根据您期望的行,您将需要调用 Read
方法,该方法实际上会为您获取结果,因此这种情况应该很好,因为只有在有一行要读出时它才会进入
while(rdr.Read())
...
或
if(rdr.Read())
...
【讨论】:
【参考方案3】:发生这种情况是因为您还没有阅读下一条记录。
改变
if (rdr.HasRows)
string fieldValue = rdr.GetString(0);
到
if (rdr.Read())
string fieldValue = rdr.GetString(0);
【讨论】:
以上是关于使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)的主要内容,如果未能解决你的问题,请参考以下文章
访问从 SQL Server 中的 SQLCLR 存储过程返回的 SqlXml
如何从 SQL Server 存储过程中的 3 列中获取 MAX 值?