2015-11-17 2 views
0

Я попытался отправить данные datagridview на sql-сервер. У меня есть логический слой и слой данныхКак отправить данные datagridview на sql-сервер?

// calling logic layer 

    RecLogic.ProcessRecoveryData(dataGridView1.DataSource) 

тогда я доступ к этому DataSource из datalayer

//this is my logic class 

public void ProcessRecoveryData(object dataSource) 
{ 
    try 
    {    
     new RecoveryData().ProcessRecoveryData(dataSource); 
    } 
    catch (SqlException sqlEx) 
    { 
     throw sqlEx; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

курица я получить доступ, что источник данных из логического слоя

//this is my data class 

public void ProcessRecoveryData(object dataSource) 
    { 

     try 
     { 
      sqlCon.Open(); 
      sqlCmd.Connection = sqlCon; 
      SqlDataAdapter sqlAdp = new SqlDataAdapter(); 
      for (int i = 0; i < dataGridView1.dataSource.Rows.Count; i++) 
       { 
        sqlCmd.CommandType = CommandType.StoredProcedure; 
        sqlCmd.CommandText = "my_sp";    sqlCmd.Parameters.AddWithValue("@p1",dataGridView1.dataSource.Rows[i].Cells["text"].Value); sqlCmd.Parameters.AddWithValue("@p2",dataGridView1.dataSource.Rows[i].Cells["text"].Value); 
         sqlAdp.SelectCommand = sqlCmd; 
        }     
      } 
      catch (SqlException sqlEx) 
      { 
       throw sqlEx; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      finally 
      { 
       sqlCon.Close(); 
       sqlCmd.Dispose(); 

      } 
     } 

, как я могу отправить источник данных в слой данных в sql?

+0

Табличные значения могут быть полезны здесь. https://msdn.microsoft.com/en-AU/library/bb510489.aspx https://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx –

ответ

0

Вы должны определить тип таблицы и имеют параметры этого типа в хранимой процедуре ...... например В SQL ....

CREATE TYPE myTableType AS table (
    categoryBridgeId uniqueIdentifier, 
    denomination int, 
    qty int 
    ); 

CREATE PROCEDURE [dbo].[My_Sproc] (@items myTableType READONLY, 
etc 

Тогда в C# вы можете пройти a DataTable к сохраненной процедуре ...

.. 
var tblParam = new SqlParameter("@items", SqlDbType.Structured); 
tblParam.Value = GetItemsAsDataTable(req); 
tblParam.TypeName = "dbo.myTableType "; 
cmd.Parameters.Add(tblParam); 
... 

private static DataTable GetItemsAsDataTable(ECodeAddItemsToBasketRequest req) 
{ 
    var result = new DataTable(); 
    result.Columns.Add("categoryBridgeId", typeof(Guid)); 
    result.Columns.Add("denomination", typeof(int)); 
    result.Columns.Add("qty", typeof(int)); 
    foreach (var item in req.ps) 
    { 
    Guid category = item.cid; 
    int denomination = item.d; 
    int qty = item.q; 
    result.Rows.Add(category, denomination, qty); 
    } 
    return result; 
} 

Надеюсь, что это поможет - Удачи!

+0

Я использую sql server 2005, эта версия не имеет типа datatable. –

+0

??????? Я уверен, что он доступен на том же языке, который вы используете для «ProcessRecoveryData» , и я уверен, что у SQL Server 2005 есть типы . Данную версию находится в C# – AntDC

Смежные вопросы