2016-08-05 31 views
0

私はODBCドライバとMariaDBにアップサートを作成しようとしていますが、私は更新部分に問題があるとSSISアップサート。 ODBCで単一行を更新するコンポーネントが見つかりません。ODBCドライバ

Overview Dataflow Task

私は、スクリプトコンポーネントを試してみましたが、私はそれは(C#は私の強いスイートではありません)proberly実行するために取得することはできません。

public override void Eingabe0_ProcessInputRow(Eingabe0Buffer Row) 
{ 
    ConnectionManagerOdbc mariaDbConnection = (ConnectionManagerOdbc)base.Connections.OTRSDB; 
    System.Data.SqlClient.SqlConnection sqlConn = (System.Data.SqlClient.SqlConnection) mariaDbConnection.AcquireConnection(null); 
    System.Data.SqlClient.SqlCommand sqlComm; 
    sqlConn.Open(); 
    String sqlCommand = "UPDATE xdwdata.Contracts " + 
    "SET " + 
     " reference = " + Row.reference.ToString() + 
     " customer = " + Row.customer.ToString() + 
     " contract = " + Row.contract.ToString() + 
     " status = test " + Row.status.ToString() + 
     " change_date = " + Row.changedate.ToString() + 
    " WHERE " + 
     " id = " + Row.id.ToString() + 
     " AND client = " + Row.client.ToString(); 
    sqlComm = new System.Data.SqlClient.SqlCommand(sqlCommand, sqlConn); 
    sqlComm.ExecuteNonQuery(); 

    mariaDbConnection.ReleaseConnection(sqlConn); 

} 

誰かが私にエラーを指摘できますか?

別の質問がある:それはPreExecuteメソッドで接続を作成することが可能ですので、私はすべての行のための接続を開いたり閉じませんか?自身の質問に答えることは、それを解決するための正しい方法があるが、ここで行く場合

+0

あなたはどのようなエラーメッセージを得るのですか? –

答えて

0

わからない:

OdbcConnection odbcConn; 
OdbcCommand odbcCmd; 
OdbcParameter odbcParam; 

public override void AcquireConnections(object Transaction) 
{ 
    string connectionString; 
    connectionString = this.Connections.OTRSDB.ConnectionString; 
    odbcConn = new OdbcConnection(connectionString); 
    odbcConn.Open(); 
} 


public override void PreExecute() 
{ 
    odbcCmd = new OdbcCommand("UPDATE xdwdata_Contracts " + 
    "SET " + 
     " reference = ? " + 
     " ,customer = ? " + 
     " ,contract = ? " + 
     " ,status = ? " + 
     " ,change_date = ? " + 
    " WHERE " + 
     " id = ? " + 
     " AND client = ? ", odbcConn); 
    odbcParam = new OdbcParameter("@reference", OdbcType.VarChar, 128); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@customer", OdbcType.VarChar, 40); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@contract", OdbcType.VarChar, 14); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@status", OdbcType.VarChar, 16); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@change_date", OdbcType.DateTime); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@id", OdbcType.Int, 11); 
    odbcCmd.Parameters.Add(odbcParam); 
    odbcParam = new OdbcParameter("@client", OdbcType.VarChar, 2); 
    odbcCmd.Parameters.Add(odbcParam);  
} 


public override void Eingabe0_ProcessInputRow(Eingabe0Buffer Row) 
{   
     odbcCmd.Parameters["@reference"].Value = Row.reference; 
     odbcCmd.Parameters["@customer"].Value = Row.customer; 
     odbcCmd.Parameters["@contract"].Value = Row.contract; 
     odbcCmd.Parameters["@status"].Value = Row.status; 
     odbcCmd.Parameters["@change_date"].Value = Row.changedate; 
     odbcCmd.Parameters["@id"].Value = Row.id; 
     odbcCmd.Parameters["@client"].Value = Row.client; 
     odbcCmd.ExecuteNonQuery();   
} 

public override void ReleaseConnections() 
{ 
    odbcConn.Close(); 
} 

はメソッドの外側の接続(ええ、私は愚かだ、知っている)を宣言は、あなたが使用することができます接続を一度しか開いたり閉じたりすることはできません。

残りはここからです。私の意見ではhttps://msdn.microsoft.com/en-us/library/ms345157.aspx

それはそれが必要、より複雑に見えますが、それは動作します。

関連する問題