【问题标题】:Display data from database using stored procedure C# [closed]使用存储过程 C# 显示数据库中的数据 [关闭]
【发布时间】:2015-06-24 08:16:59
【问题描述】:

我的任务是创建一个控制台应用程序,该应用程序显示工作输入系统的空值(员工用来声明他们正在处理的客户端等的程序)。

我被告知有一个名为spr_Reports_JobsBreakdown4 的存储过程,带有以下参数:

@user nvarchar(20)
@datefrom datetime
@dateto datetime 

我必须以某种方式创建一个控制台应用程序,该应用程序使用此存储过程来显示空值,这意味着有人忘记了输入作业。到目前为止,我所做的只是连接到数据库..

我已经观看并阅读了教程,但似乎没有任何帮助。

我是 C# 新手..help ?!?

这是我用来连接数据库的代码。

SqlConnection sqlConnection = new SqlConnection("Data Source=DEFIANT\\SQL2012; Initial Catalog=HRD_MIS_Jobs2009; User ID=id; Password=password");

try
{
    sqlConnection.Open();
    Console.WriteLine("successful connection");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

【问题讨论】:

  • google "c#如何使用存储过程"
  • 非常可笑,我已经这样做了,但无济于事。我会很感激一些可靠的帮助。
  • @DavidMicallef 你能贴出你写的连接数据库的代码吗?
  • 这听起来更像是一份报告的工作,而不是一个控制台应用程序。 Sql Server Reporting Services 可以轻松做到这一点(假设您可以使用它)。

标签: c# sql-server stored-procedures


【解决方案1】:

你基本上需要这样的东西:

  • 设置与数据库的连接
  • 定义执行存储过程的命令
  • 定义和设置参数值
  • 然后遍历存储过程返回的结果集
  • 做一些事情对返回的数据有用....

这样的代码:

string connectionString = "Data Source=DEFIANT\\SQL2012; Initial Catalog=HRD_MIS_Jobs2009; User ID=id; Password=password";
string storedProcedureName = "dbo.spr_Reports_JobsBreakdown4";

// establish connection to DB, define command to execute stored procedure
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(storedProcedureName, conn))
{
    try
    {
        // set type of command to stored procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // define parameters
        cmd.Parameters.Add("@user", SqlDbType.NVarChar, 20);
        cmd.Parameters.Add("@datefrom", SqlDbType.DateTime);
        cmd.Parameters.Add("@dateto", SqlDbType.DateTime);

        conn.Open();
        Console.WriteLine("successful connection");

        // set parameter values
        cmd.Parameters["@user"].Value = ......;
        cmd.Parameters["@datefrom"].Value = ......;
        cmd.Parameters["@dateto"].Value = ......;

        // execute stored procedure, handle return values
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
             while (reader.Read())
             {
                 // handle your data here.....
             }

             reader.Close();
        }

        conn.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

【讨论】:

    【解决方案2】:

    好的,下一步,在您连接到数据库后,您需要一种向其发出命令的方法。你可以这样做:

    //Create a command object
    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Text = "spr_Reports_JobsBreakdown4";
    cmd.Connection = sqlConnection;
    
    //Create its parameters
    SqlParameter param1 = new SqlParameter("@user", SqlDbType.NVarChar);
    param1.value = "someusername";
    
    SqlParameter param2 = new SqlParameter("@datefrom", SqlDbType.DateTime);
    param2.value = DateTime.Now - 1; //this should result in yesterday date/time
    
    SqlParameter param3 = new SqlParameter("@datefto", SqlDbType.DateTime);
    param3.value = DateTime.Now;
    
    //Add parameters to the command
    cmd.Parameters.Add(param1);
    cmd.Parameters.Add(param2);
    cmd.Parameters.Add(param3);
    
    //Execute your command this way if the procedure returns just a single value
    var res = cmd.ExecuteScalar();
    
    //... Or else use a reader
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
         while (reader.Read())
         {
             // you can read specific items from your reader with
             var col1Content = reader("col1");
         }
    
         reader.Close();
    }
    

    我希望这足以为您指明进一步研究的正确方向。

    【讨论】:

    • 如果 sp 返回多个结果怎么办?
    • @ArunprasanthKV 你说得对,我将编辑我的帖子,整合部分 marc_s 答案
    • 好的...现在答案有效
    【解决方案3】:

    在 app.config 中

     <add name="DataSource" providerName="System.Data.SqlClient" connectionString="[connection string details]"/>
      </connectionStrings>
    

    然后在数据访问类中

     string user;
        datetime dateFrom;
        datetime DateTo;
    
       //populate parameters...
    
       ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings["DataSource"];
         try
         {
             using (SqlConnection conn = new SqlConnection(connectionString.ConnectionString))
             {
                 conn.Open();
                 using (SqlCommand cmd = new SqlCommand("spr_Reports_JobsBreakdown4 ", conn))
                 {
                     cmd.CommandType = CommandType.StoredProcedure;
    
                     cmd.Parameters.Add(new SqlParameter("@user", user));
                     cmd.Parameters.Add(new SqlParameter("@datefrom", dateFrom));
                     cmd.Parameters.Add(new SqlParameter("@dateto", dateTo));
    
                     reader = cmd.ExecuteReader();
    
                     while (reader.Read())
                     {
                        //use reader to read in each returned row
                     }
    
                     reader.close();
                 }
             }
          }
          catch(Exception ex){
             //handled exception
          }
    

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      相关资源
      最近更新 更多