よしを実行することはできません、私は他の質問の束を見てきたが、ここでは正しい答えを見つけるように見えることはできません...Windowsサービスは、ストアドプロシージャ
私はでWindowsサービスを書いていますC#を使用して、ストアドプロシージャを使用してSQL Server Expressにデータをアップロードすることができます。手順はかなり長いですが、TSVから一時表へのデータの読み込み、それからそのデータを更新して別の永久テーブルに挿入することが含まれます。現在、ストアドプロシージャは、Windowsタスクスケジューラで実行されるバッチファイルによって起動されます。私はこの仕事などを行うWindowsサービスに移行しようとしています。
私が抱えている問題は、このストアドプロシージャがサービスから実行されないことです。
SqlConnection conn = new SqlConnection("user id=reports; Password=*****; Integrated Security=false;" +
"database=data_warehouse; Server=(serverName); ");
try
{ conn.Open();
}
catch (Exception ex)
{
Library.WriteErrorLog(ex);
}
SqlCommand GetSalesCount = new SqlCommand("select count (*) from [sales data] where EventEndDate = convert(date,getdate())");
GetSalesCount.CommandTimeout = 0;
GetSalesCount.Connection = conn;
int? preCount = (int?)GetSalesCount.ExecuteScalar();
Library.WriteErrorLog("started with " + preCount.ToString() + " records.");
SqlCommand sql = new SqlCommand("exec LoadSalesData", conn);
sql.CommandTimeout = 0;
try
{
sql.ExecuteNonQuery();
}
catch (Exception ex)
{
Library.WriteErrorLog(ex);
}
// Getting the nuber of sales afterward
SqlCommand getOffloadCount = new SqlCommand("Select count (*) from [sales data] where EventEndDate = convert(date,getdate())", conn);
int? post = (int?)getOffloadCount.ExecuteScalar();
Library.WriteErrorLog("Had " + post.ToString() + " records at End");
conn.Close();
ここでは、これは機能しません。コードブロックは完了しましたが、レコードが更新されません。つまり、ストアドプロシージャは実行されません。 executeNonQuery
の結果を保存すると、(-1)が得られます。私は同じ資格情報とsmssから同じexec LoadSalesData
を実行する場合、それはうまく動作し、処理に30秒かかることがあります。
私はストアドプロシージャを、同じ時間内にテーブルに行を追加するだけでループさせる別のプロシージャに置き換えることができます。
私は、ssmsの代わりにサービスから実行する要求と関係があると考えていますか?パーミッション?私はどこを見るか分からない。
いずれのアイデアも素晴らしいでしょう。ありがとう。
あなたのコマンドから 'exec'を削除し、' sql.CommandType = CommandType.StoredProcedure'を代わりに使ってみましたか? –
私は、はい。無駄に。 –