我有这样的方法
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异常
请你们看一下。
答案 0 :(得分:2)
尝试:
SELECT [name]
FROM [master]..[sysdatabases] // **not** [master..sysdatabases]
(注意方括号)
也;最好将using
用于SqlConnection
,SqlCommand
等 - 实现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
}
}