Как создать пакетный файл и выполнить команду bcp с помощью C#?

#c# #sql-server #windows-services #bcp

Вопрос:

Я хочу получить данные из всех таблиц конкретной базы данных. Я создал несколько инструкций BCP в sql. Теперь мне нужно выполнить эти инструкции bcp из службы Windows, используя пакетный файл на c#.

У меня есть следующие заявления bcp:

 bcp [MyDB].[dbo].[tbl_UserLocations] out c:tempdbo_tbl_UserLocations.txt -S dbinstance.cvxlgn3jt61m.us-east-1.rds.amazonaws.com -U adminusername -P adminpassword -c
bcp [MyDB].[dbo].[tbl_UserTypes] out c:tempdbo_tbl_UserTypes.txt -S dbinstance.cvxlgn3jt61m.us-east-1.rds.amazonaws.com -U adminusername -P adminpassword -c
 

Помощь оценена по достоинству.

Комментарии:

1. Почему бы не использовать GetSchema? docs.microsoft.com/en-us/dotnet/api/…

2. Почему пакетный файл, почему не Process.Start напрямую с C#

3. не могли бы вы дать пример кода для выполнения команд bcp с C#?

Ответ №1:

Наконец-то вот рабочий код:

 public void ExecuteBatchCommands()
{
            try
            {
                Logger.WriteToFile(serviceName   "=> ExecuteBatchCommands() started : "   DateTime.Now.ToLongTimeString());
                Process proc = null;
                proc = new Process();
                //proc.StartInfo.WorkingDirectory = targetDir;
                proc.StartInfo.FileName = "BCPCommands.bat";
                //proc.StartInfo.Arguments = string.Format("10");  //this is argument
                proc.StartInfo.CreateNoWindow = false;
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  //this is for hiding the cmd window...so execution will happen in back ground.
                proc.Start();
                proc.WaitForExit();
                proc = null;
                Logger.WriteToFile(serviceName   "=> ExecuteBatchCommands() ends : "   DateTime.Now.ToLongTimeString());
            }
            catch (Exception ex)
            {
                Logger.WriteToFile(serviceName   "=> ExecuteBatchCommands() => Exception occured while executing batch process at "   DateTime.Now.ToLongTimeString()   " "   ex.StackTrace   " n"   ex.Message);
            }
}