2

我有这个在类中创建 SqlConnection 字符串的方法。我从 .txt 文件中读取数据,但问题是如果没有插入数据,应用程序甚至都不会打开。我想知道如何在消息框中引发异常并将该命令直接插入到此类方法中。我不确定这是否可能。对不起,如果我的回答太琐碎或毫无意义。我很久没有编程了。

internal static class DataSource
    {
        private static string _ConnectionString;
        public static string ConnectionString
        {
            get
            {
                if (_ConnectionString == null)
                    _ConnectionString = FunctionToDynamicallyCreateConnectionstring();
                return _ConnectionString;
            }
        }
 private static string FunctionToDynamicallyCreateConnectionstring()
        {

                string path = "C:\\Users\\marek\\Documents\\Visual Studio 2012\\Projects\\tours\\tours\\sql_string.txt";
                StreamReader sr = new StreamReader(File.Open(path, FileMode.Open));

                SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder();

                cb.DataSource = sr.ReadLine();
                cb.InitialCatalog = sr.ReadLine();
                cb.UserID = sr.ReadLine();
                cb.Password = sr.ReadLine();
                return cb.ToString();

        }
4

2 回答 2

2

使用 try/catch包装对DataSource.ConnectionString应用程序启动时间的访问。下面是一些伪代码:

public void OnAppStart()
{
    string connString = null;
    try
    {
        connString = DataSource.ConnectionString;
    }
    catch (IOException ioe) 
    {
        MessageBox.Show("Hey, the file doesn't exist!");
    }
    catch (ArgumentNullException ane)
    {
        MessageBox.Show("Hey, the file is missing information!");
    }
    //You should be prepared to deal with a null or malformed connString 
    //from this point forwards
}
于 2013-08-06T22:39:40.193 回答
0

我真的不鼓励“向 MessageBox 中抛出异常”,尤其是如果你只这样做的话。异常用于处理错误,显示 MessageBox 不会处理错误。如果您无法处理错误,请停止。如果您只是显示一条消息并继续,当您尝试使用未获得的数据时,您将再次遇到相同的异常。那你打算怎么办?显示另一个消息框?

是什么让您认为显示 MessageBox 会有所帮助?用户会知道如何修复它吗?如果代码是从服务或后台任务调用的并且没有 UI 怎么办?

如果您知道如何修复文件,您应该捕获异常,修复文件,然后重试。

编辑: 好的,如果你真的想“在这个类方法中”显示一个 MessageBox,试试这个:

private static string ReadConnectionstringFromFile(string path)
{
    try
    {
        using (var sr = new StreamReader(File.Open(path, FileMode.Open))
        {
            var cb = new SqlConnectionStringBuilder();
            cb.DataSource = sr.ReadLine();
            cb.InitialCatalog = sr.ReadLine();
            cb.UserID = sr.ReadLine();
            cb.Password = sr.ReadLine();
            return cb.ToString();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), ex.message);
        throw new CustomExceptionClassForYourApplication("Trying to get connection string from "
            + path, ex);
    }
}
于 2013-08-06T23:09:04.767 回答