#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);
}
}