2012-03-19 2 views
0

Я много искал в Google, но не смог найти формат, после которого я могу подключиться к SQL Server и получить данные из хранимой процедуры, которая не требует каких-либо параметров, и получение данные из двух таблиц.Формат хранимой процедуры

Я хочу, чтобы получить данные из хранимой процедуры и сохранить в том, что я могу легко получить данные.

Моя хранимая процедура,

ALTER PROCEDURE [dbo].[GetTablesData] 
AS 
    SELECT TableA.Column1, TableB.Column2 
    FROM TableA TableA 
    INNER JOIN TableB TableB 
    ON TableA.ID = TableB.ID AND TableA.ID2 = TableB .ID2 

Как я получить две колонки, мне нужно проверить

If (Column1 < 7) 
    Then Get Column2 and calculate a email address (by stripping off things from that column and get the data I want...) and send an email. 

Теперь я не знаю, как я буду вызывать хранимую процедуру и сделать использование это в выражении IF else, я посмотрел на старый код, где они используют XSD (Dataset), но я не понял эту концепцию либо в Интернете.

+0

Я могу сделать все/еще код заявление, если только не знаю, как получить данные с помощью хранимой процедуры и где хранить его, и как получить его , Приветствия –

+0

related: http://stackoverflow.com/questions/1260952/how-to-execute-a-stored-procedure-from-c-sharp-program –

ответ

1

Вы можете использовать ExecuteReader для извлечения читателя. Читатель выполняет итерацию по всем строкам в результирующем наборе. Чтобы получить первую строку, вызовите Read() один раз.

Если Read() возвращает true, вы можете получить доступ к столбцам, например read["column1"]. Тип столбца может быть SqlTypes.SqlInt32, который вы можете отличить до int, используя as.

Таким образом, вы бы в конечном итоге с чем-то вроде:

using (var con = new SqlConnection("...connection string here...")) 
{ 
    var com = con.CreateCommand(); 
    com.CommandText = "GetTablesData"; 
    com.CommandType = CommandType.StoredProcedure; 
    con.Open(): 
    using (var read = cmd.ExecuteReader()) 
    { 
     if (!read.Read()) 
      throw new Exception("No rows returned!")l 

     if (read["Column1"] as int < 7) 
     { 
      var col2 = read["Column2"] as string; 
      // Do stuff with col2 
     } 
    } 
} 
2

Вы можете использовать ExecuteReader() метод SqlCommand так:

SqlConnection sqlConnection1 = new SqlConnection("Your Connection String"); 
SqlCommand cmd = new SqlCommand(); 
SqlDataReader reader; 

cmd.CommandText = "GetTablesData"; //StoredProcedureName 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Connection = sqlConnection1; 

sqlConnection1.Open(); 

reader = cmd.ExecuteReader(); 

DataTable myData = new DataTable(); 
myData.Load(reader); 

sqlConnection1.Close(); 

Вы можете получить значения из DataTable с помощью своих шагового. как,

foreach(var dr in myData) 
{ 
    Debug.WriteLine("By Column Name:" + dr["ColumnName"]); 
    Debug.WriteLine("By Column Index:" + dr[0]); 
    Debug.WriteLine("------Next Row-------"); 
} 

Более конкретно ...

if(Convert.ToInt32(dr["Column1"]) < 7) 
{ 
    //Do required operation 
} 
+0

Как я смогу использовать оператор If с этим DataTable? , приветствия –

+0

извините за задержку ... Я обновил ответ. – NaveenBhat

1

Есть несколько способов, вы можете получить обратно данные из сохраненных проками я включил 3 различных способов сделать это, например, с помощью чтения по Knvn также хорошо, я просто не включил его здесь, потому что нет необходимости дублировать его ответ.

Я знаю, что они находятся в VB, и вы используете C#, но их легко конвертировать и работать одинаково.

Это вернет ваши данные и поместит их в datatable.

Dim dt As New DataTable 

    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    Using da As New SqlDataAdapter(cmd) 
    conn.Open() 
    da.Fill(dt) 
    conn.Close() 
    End Using 

Если у вас есть процедура, которая будет только когда-либо вернуть один результат, который Вы могли бы хотеть, чтобы выполнить его как скаляр и присвоить результат Streight переменной типа так:

Dim names As String = String.Empty 

    Dim ds As New DataTable 

    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    conn.Open() 

    names = cmd.ExecuteScalar() 

    conn.Close() 

Тогда третий пример это если вы хотите выполнить некоторый SQL, который ничего не возвращает. В этой ситуации нет необходимости использовать для чтения и т.д. Вы можете просто сделать ExecuteNonQuery()

Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 

    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    conn.Open() 
    cmd.ExecuteNonQuery() 
    conn.Close() 
Смежные вопросы