标签: sqldatareader

使用C#中的输出参数和结果集读取SP?

我创建了一个类似于这个简化示例的存储过程:

CREATE PROCEDURE dbo.sp_MyStoredProcedure
    @Var1 INT OUTPUT,
    @Var2 DECIMAL(10,2) OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SELECT
        @Var1 = COUNT(*),
        @Var2 = SUM(TranAmount)
    FROM
        MyTable

    SELECT * FROM MyTable
END
Run Code Online (Sandbox Code Playgroud)

当我在调用对象的ExecuteReader()方法后尝试从输出变量中读取值时SqlCommand,值为null.

string MyConnString = string.Empty;
SqlConnection MyConn = new SqlConnection(MyConnString);
SqlCommand MyCmd = new SqlCommand("sp_MyStoredProcedure", MyConn);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add(new SqlParameter("@Var1", SqlDbType.Int));
MyCmd.Parameters.Add(new SqlParameter("@Var2", SqlDbType.Decimal);
MyCmd.Parameters[0].Direction = ParameterDirection.Output;
MyCmd.Parameters[1].Direction = ParameterDirection.Output;
SqlDataReader dr = MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
int Var1 = Convert.ToInt32(MyCmd.Parameters[0].Value);
decimal Var1 = Convert.ToDecimal(MyCmd.Parameters[1].Value);
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c# stored-procedures sql-server-2005 sqldatareader output-parameter

1
推荐指数
1
解决办法
9863
查看次数

如何检查DataReader是否包含数据?

我再次检查DataReader对象是否有数据有问题?

Dim cmd as SqlCommand
Dim drd as SqlDataReader

      cmd = New SqlCommand ("SELECT * FROM Stock", conx)
      drd = cmd.ExecuteReader()

      ''HERE I WOULD LIKE TO CHECK WHETHER drd has Data or not

     While (drd.Read())
     {
          txtName.Text = drd.Item("StockName")
     }
Run Code Online (Sandbox Code Playgroud)

我该怎么检查?请帮我!谢谢大家!

vb.net sqldatareader

1
推荐指数
1
解决办法
2万
查看次数

ReSharper使用SqlDataReader显示警告

当我写这样的东西时:

using (var connection = new SqlConnection("ConnectionString"))
{
    using(var cmd= new SqlCommand("Command"))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ReSharper显示警告reader.Read(),并告诉读者可以null.

但在什么情况下它可以为空?据我所知,如果命令返回什么,读者不是空的,它只有什么都没有.

.net c# resharper sqldatareader

1
推荐指数
1
解决办法
195
查看次数

SQL数据读取器:没有数据时读取的尝试无效

我试图使用a SqlDataReader来运行查询,然后在消息框中显示结果,但我一直收到错误

没有数据时无效尝试读取.

这是我的代码.

 public void button1_Click(object sender, EventArgs e)
 {
    string results = "";
    using (SqlConnection cs = new SqlConnection(@"Server=100-nurex-x-001.acds.net;Database=Report;User Id=reports;Password=mypassword"))
    {
         cs.Open();
         string query = "select stationipaddress from station where stationname = @name";
         using (SqlCommand cmd = new SqlCommand(query, cs))
         {
              // Add the parameter and set its value -- 
              cmd.Parameters.AddWithValue("@name", textBox1.Text);
              using (SqlDataReader dr = cmd.ExecuteReader())
              {
                   while (dr.Read())
                   {
                        label3.Text = dr.GetSqlValue(0).ToString();
                        results = dr.GetValue(0).ToString();
                        //MessageBox.Show(dr.GetValue(0).ToString());
                        //MessageBox.Show(results);
                    }
                    MessageBox.Show(results);
              }
         }
    } 
}
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server sqldatareader

1
推荐指数
1
解决办法
3万
查看次数

将SqlDataReader作为参数和构造函数参数错误发送到构造函数

我创建了一个公共类,并使用以下参数编写了一个公共构造函数:

public Patient(SqlDataReader reader, string p) {
        if (p == "L") {
            Name = reader[0].ToString();
        }
        else { }
    }
Run Code Online (Sandbox Code Playgroud)

然后我使用了这个构造函数

SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Patient myP(reader, "L");                    
                }
Run Code Online (Sandbox Code Playgroud)

然后在调试期间,我收到错误:错误49预期; 或=(不能在声明中指定构造函数参数)

问题在哪里,我该如何解决?

c# constructor sqldatareader

1
推荐指数
1
解决办法
293
查看次数

如何在从SqlDataReader读取变量时定义变量(返回所有行)

我有一个表,其中有14行我想要返回,并声明每个单元格作为变量.这是我尝试过的:

using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString))
        {
            SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer] 
            from [MyTable]", conn1);
            conn1.Open();
            using (SqlDataReader reader1 = cmd1.ExecuteReader())
            {
                while (reader1.HasRows)
                {
                    reader1.GetName(0);
                    reader1.GetName(1);

                    while(reader1.Read())
                    {
                        string Question(1) = reader1.GetString(0); //errors here
                        string Answer(1) = reader1.GetString(1); //and here
                    }
                    reader1.NextResult();
                }
            }
}
Run Code Online (Sandbox Code Playgroud)

我希望将声明的变量返回为Question1- Question14Answer1- Answer14.我该怎么做呢?

c# sql-server sqldatareader c#-4.0

1
推荐指数
1
解决办法
852
查看次数

将Generic类与SqlDataReader GetValue一起使用

我有这个代码适用于没有NULL值的数据库

public T GetField<T>(SqlDataReader dr, string fieldName)
{
    return (T)dr.GetValue(dr.GetOrdinal(fieldName));
}
Run Code Online (Sandbox Code Playgroud)

然后我想控制DBNull值,因为它们已经存在于某些表中,我升级了这个函数:

public T GetField<T>(SqlDataReader dr, string fieldName) where T : new()
{
    var value = dr.GetValue(dr.GetOrdinal(fieldName));   
    return value is DBNull ? new T() : (T)value;
}
Run Code Online (Sandbox Code Playgroud)

但是现在,我不能要求GetField<string>因为string没有带0参数的构造函数.

我试图创建另一个像Abstract一样的函数,没有任何限制,只有像这样的字符串类型

public string GetField<string>(SqlDataReader dr, string fieldName)
{
    var value = dr.GetValue(dr.GetOrdinal(fieldName));   
    return value is DBNull ? "" : value.ToString();
}
Run Code Online (Sandbox Code Playgroud)

但答案是它们的定义不明确,因为T也包括字符串,即使应用了限制.

我可以为每种数据类型创建独立的函数,但我更喜欢抽象的解决方案,因为它更清晰.

我错过了什么?

谢谢!

c# generics sqldatareader

1
推荐指数
1
解决办法
984
查看次数

在C#中,SQL连接正在打印:'System.Data.SqlClient.SqlDataReader'

我想在C#中运行一个SQL语句

这是代码:

static void Main(string[] args)
{
    SqlConnection conn = new SqlConnection(
        @"Data Source=loninasd023.xx.xx.com;Initial 
        Catalog=DB.Manager.Data;Integrated Security=SSPI;");

    if (impersonateValidUser("svc_mgr", "USERNAME", "PASSWORD"))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(
          "SELECT [data_check_info] FROM [DB.Manager.Data].[dbo].[server_package_status]", 
          conn);

        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine(reader);
        }

        reader.Close();
        conn.Close();

    }
    else
    {
        Console.WriteLine("The impersonation failed.");
        Environment.Exit(100);
    }

}
Run Code Online (Sandbox Code Playgroud)

该程序打印这个:

System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c# sqldatareader

1
推荐指数
1
解决办法
437
查看次数

用C#读取SQL查询

我试图让我的SQL查询读取,但它并没有真正起作用.它一直在工作,直到它来到查询部分,然后在线:

rst = query.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

它收到一个错误:

Connection属性尚未初始化.

有谁知道如何处理这个?

 Chart chart = new Chart();
    StringBuilder xmlStr = new StringBuilder();
    StringBuilder strCategories = new StringBuilder();
    StringBuilder strProcesses = new StringBuilder();
    StringBuilder strTasks = new StringBuilder();

    xmlStr.Append("<chart logoURL='../../Images/Piktogramme/" + chart.Image + "' caption='" + chart.Caption + "' theme='flat'" + " dateformat='dd/mm/yyyy' showTaskLabels='1'>"); // attributes will go here

    // Category for each month
    for (int i = -12; i < 6; i++)
    {
        DateTime today = DateTime.Now;
        today = today.AddMonths(i);
        strCategories.Append("<category start='1/" + today.Month + …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server sqldatareader fusioncharts

1
推荐指数
2
解决办法
177
查看次数

IndexOutOfRangeException SqlDataReader从表中读取bool值

我有3个表:users,feed(id,body,title,link)userstofeed(id,userid,feedid,isread)而我试图读取userstofeed表布尔值,它带来的IndexOutOfRangeException.请告诉我,我做错了什么

while (reader.Read())
{
     rssFeed.Title = reader["title"].ToString();
     rssFeed.Body = reader["body"].ToString();
     rssFeed.Link = reader["link"].ToString();
     rssFeed.IsRead = (bool) reader["isread"]; //IndexOutOfRangeException here
     yield return rssFeed;
}
Run Code Online (Sandbox Code Playgroud)

这里是sql store程序:

create proc spGetItemsByUser
@userName nvarchar(50)
as
begin
declare @userId int
declare @feedId table (id int)

select @userId = id 
from Users 
where name = @userName

insert into @feedid (id)
select feedid, isread 
from userstofeed 
where userid = @userId

select * from feed where id in (select id …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server stored-procedures sqldatareader

1
推荐指数
1
解决办法
120
查看次数