如何将值从批处理文件返回到我的C#代码

时间:2017-12-01 12:54:50

标签: c# sql batch-file c#-4.0

我有一个批处理文件,我在运行时从我的C#代码运行以创建一个新的数据库。

我提供了:

        
  • 用户名
  •     
  • 数据库名称
  •     
  • 密码
  •     
  • 服务器详细信息

并在创建db的批处理文件中执行sql文件,这是我的批处理文件:

sqlcmd -S %1 -U %2 -P %3  -i SQLScript.sql 

我想知道如果在尝试创建数据库时遇到错误,我如何通知我的代码。

我可以将值返回给我的c#代码吗?

我正在使用Process.start()方法来调用我的批处理文件。 我尝试使用-E -b,然后给出错误级别,但这不起作用。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用SqlCommand直接在C#程序中运行脚本。

喜欢这个

    SqlConnection myConn = new SqlConnection ("Server=localhost;Integrated security=SSPI;database=master");

    string str = "CREATE DATABASE MyDatabase ON PRIMARY " +
        "(NAME = MyDatabase_Data, " +
        "FILENAME = 'C:\\MyDatabaseData.mdf', " +
        "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
        "LOG ON (NAME = MyDatabase_Log, " +
        "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
        "SIZE = 1MB, " +
        "MAXSIZE = 5MB, " +
        "FILEGROWTH = 10%)";

    SqlCommand myCommand = new SqlCommand(str, myConn);
    try 
    {
        myConn.Open();
        myCommand.ExecuteNonQuery();
        MessageBox.Show("DataBase is Created Successfully", "MyProgram", 
                MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, 
                MessageBoxIcon.Information);
    }
    finally
    {
    if (myConn.State == ConnectionState.Open)
    {
        myConn.Close();
    }

如果您需要从外部文件获取脚本,请更改为:

string str = System.IO.File.ReadAllText("SQLScript.sql");