2009-10-29 3 views
1

Вкратце, где можно найти пример кода на клиентской стороне C#/VB, который вызывает хранимую процедуру CLR с некоторым аргументом (например, данные sqlxml) и получает файл данных или другую форму результата?Вызов хранимых процедур CLR

Также как периодически получать информацию из запущенного CLR хранимой процедуры, отправленной методом SQlContext.Pipe.Send()?

ответ

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

Спасибо. Это очень близко к тому, что я хочу. Все еще есть одна проблема, как периодически получать обновления из хранимой процедуры? например, у меня есть CLRO SPROC, который идет в цикле и использует «SqlContext.Pipe.Send (% Complete)», чтобы уведомить клиента о прогрессе. Как получить эту информацию на стороне клиента? – captonssj

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

Да, я знаю об этом. Как получить эту информацию на стороне клиента, если у меня есть SqlContext.Pipe.Send (запись) внутри цикла? Я хочу код образца клиентской стороны. – captonssj

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 проверить это? – 2009-11-07 06:22:06