2009-10-29 142 views
1

总之,我在哪里可以找到C#/ VB客户端示例代码,该代码使用一些argumnet [如sqlxml数据]调用CLR存储过程并接收数据读取器或其他形式的结果?调用CLR存储过程

而且我怎么定期收到来自通过SQlContext.Pipe.Send()方法发送的运行CLR存储过程的信息?

回答

0

我知道我通常创建一个普通的T-SQL存储过程,它调用我的CLR函数或存储的特效。然后他们可以像所有其他存储过程一样对待。

1
// run a stored procedure that takes a parameter 
    public void RunStoredProcParams() 
    { 
     SqlConnection conn = null; 
     SqlDataReader rdr = null; 

     // typically obtained from user 
     // input, but we take a short cut 
     string custId = "FURIB"; 

     Console.WriteLine("\nCustomer Order History:\n"); 

     try 
     { 
      // create and open a connection object 
      conn = new 
       SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI"); 
      conn.Open(); 

      // 1. create a command object identifying 
      //  the stored procedure 
      SqlCommand cmd = new SqlCommand(
       "dbo.CustOrderHist", conn); 

      // 2. set the command object so it knows 
      // to execute a stored procedure 
      cmd.CommandType = CommandType.StoredProcedure; 

      // 3. add parameter to command, which 
      // will be passed to the stored procedure 
      cmd.Parameters.Add(
       new SqlParameter("@CustomerID", custId)); 

      // execute the command 
      rdr = cmd.ExecuteReader(); 

      // iterate through results, printing each to console 
      while (rdr.Read()) 
      { 
       Console.WriteLine(
        "Product: {0,-35} Total: {1,2}", 
        rdr["ProductName"], 
        rdr["Total"]); 
      } 
     } 
     finally 
     { 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 
     } 
    } 
} 

    enter code here 
+0

感谢。这与我想要的非常接近。仍然有一个问题,我如何定期从存储过程接收更新?例如,我有一个CLR存储过程是进入一个循环,并使用“SqlContext.Pipe.Send(%完成)”通知客户端上的进度。我如何在客户端收到这些信息? – captonssj 2009-10-30 14:33:53

0
// Create a record object that represents an individual row, including it's metadata. 
     SqlDataRecord record = new SqlDataRecord(new SqlMetaData("stringcol", SqlDbType.NVarChar, 128)); 

     // Populate the record. 
     record.SetSqlString(0,("Hello World!" + System.DateTime.Now)); 

     // Send the record to the client. 
     SqlContext.Pipe.Send(record); 
+1

是的,我知道这一点。我如何收到此infomration在客户端上,如果我有一个循环内SqlContext.Pipe.Send(记录)? 我想要一个客户端示例代码。 – captonssj 2009-11-02 14:36:34

1
string connectionString = ConfigurationManager.AppSettings["ConnectDB"]; 
     SqlConnection sn = new SqlConnection(connectionString); 
     SqlParameter[] sqlParameters = new SqlParameter[1]; 
     sn.Open(); 
     SqlCommand dCmd = new SqlCommand("dbo.HelloWorld", sn); 
     dCmd.CommandType = CommandType.StoredProcedure; 
     SqlDataReader rdr = null; 
     rdr = dCmd.ExecuteReader(); 
     while (rdr.Read()) 
      { 
      for (int i = 0; i < rdr.FieldCount; i++) 
       Response.Write(rdr[i]); 
      } 
     sn.Close(); 
     } 
+0

@captonssj hav u check this? – 2009-11-07 06:22:06