我有一致的結果使用System.Diagnostics.Process並調用到OSQL.exe。它爲一個SQL文件....
我創建了一個臨時文件,我寫我的嵌入式SQL文件,有OSQL執行它,然後清理它。
process.StartInfo = new System.Diagnostics.ProcessStartInfo();
process.StartInfo.FileName = OSQLpath;
process.StartInfo.UseShellExecute = false;
...
if (!System.IO.Directory.Exists(workingDirectory))
System.IO.Directory.CreateDirectory(workingDirectory);
...
StringBuilder sbArgs = new StringBuilder();
sbArgs.Append("-S ").Append(_serverName);
sbArgs.Append(" -d ").Append(_databaseName);
sbArgs.Append(" -E");
sbArgs.Append(" -i ").Append("\"").Append(inputSQLFilePath).Append("\""); // input file
sbArgs.Append(" -o ").Append("\"").Append(System.IO.Path.Combine(workingDirectory, String.Format("osqloutput_{1}_{0}.txt", fileUnique, fileName))).Append("\""); // output file
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.Arguments = sbArgs.ToString();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo.CreateNoWindow = true;
...
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
process.Start();
process.WaitForExit();
我傾向於SqlCommand.ExecuteNonQuery()。我們在數據庫中有一個版本表,並且會定義腳本以在版本之間升級,這些版本都將在源代碼控制之下。這個應用程序有一個本土ORM,我專門爲應用程序的安裝程序工作。 – 2009-02-17 17:34:52