抓住了Sql异常

时间:2010-12-01 05:50:37

标签: c# visual-studio winforms

我有这样的方法

        public static DataSet GetAllDataBaseNames()
        {

        //Instance of connection is created
        SqlConnection sConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

        //To Open the connection.
        sConnection.Open();
        string selectDatabase = @"SELECT   
                                        [NAME]
                                    FROM     
                                        [master..sysdatabases]";

        //Instance of command is created.
        SqlCommand sCommand = new SqlCommand(selectDatabase, sConnection);

        try
            {
            //Create the dataset.
            DataSet dsListOfDatabases = new DataSet("master..sysdatabases");

            //Create the dataadapter object.
            SqlDataAdapter da = new SqlDataAdapter(selectDatabase, sConnection);

            //Provides the master mapping between the sourcr table and system.data.datatable
            da.TableMappings.Add("Table", "master..sysdatabases");

            //Fill the dataadapter.
            da.Fill(dsListOfDatabases);

            //Bind the result combobox with non primary key table names
            DataViewManager dsv = dsListOfDatabases.DefaultViewManager;
            return dsListOfDatabases;
            }
        catch(Exception ex)
            {
            //Handles the exception and log that to the EventLog with the original message.
            EventLog log = new EventLog("Application");
            log.Source = "MFDBAnalyser";
            log.WriteEntry(ex.Message);
            return null;
            }

        finally
            {
            //checks whether the connection is still open.
            if(sConnection.State != ConnectionState.Closed)
                {
                sConnection.Close();
                }
            }

        }

但是当我这样称呼它时

        public void BindDBDropDown()
        {

          DataSet dsTablesWithoutForeignKeys = default(DataSet);

        try
            {
            //The function GetAllForeignKeyTables() is called from the class PluginManager.
            dsTablesWithoutForeignKeys = DataAccessMaster.GetAllDataBaseNames();

            dgResultView.DataSource = dsTablesWithoutForeignKeys.Tables["master..sysdatabases"];
            }
        catch(Exception ex)
            {
            //All the exceptions are handled and written in the EventLog.
            EventLog logException = new EventLog("Application");
            logException.Source = "MFDBAnalyser";
            logException.WriteEntry(ex.Message);
            }
        }

它正在获取catch块中捕获的sql异常

请你们看一下。

1 个答案:

答案 0 :(得分:2)

尝试:

SELECT   [name]
FROM     [master]..[sysdatabases] // **not** [master..sysdatabases]

(注意方括号)

也;最好将using用于SqlConnectionSqlCommand等 - 实现IDisposable的所有内容 - 这将确保您不会出血连接。

using(var sConnection = new
    SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]))
{

    //To Open the connection.
    sConnection.Open();
    string selectDatabase = @"
        SELECT    [NAME]
        FROM    [master]..[sysdatabases]";

    //Instance of command is created.
    using(var sCommand = new SqlCommand(selectDatabase, sConnection)) {
         // etc
    }
}