我的表单上有2个组合框项目(comboBox2,ComboBox1) .
我正在尝试将我的数据库加载到comboBox2,然后根据所选项(数据库名称),ComboBox1显示该数据库中的表 .
当我加载我的表单时,我收到一个错误:
无法打开登录请求的数据库“System.Data.DataRowView” . 登录失败 . 用户登录失败 .
我可以在该错误上单击确定,但应用程序仍然可以正常工作 . 我可以删除我在消息框中捕获此错误的代码,但是当我加载表单时仍然会有20秒的延迟,这是不行的 .
我的comboBox2代码,它自动加载comboBox2中的数据库,如下所示:
private void Form1_Load(object sender, EventArgs e)
{
String stringConnection = @"Data Source=SERVER_NAME;Initial Catalog =DB_NAME; User ID =USER; Password =USER;";
SqlConnection con2 = new SqlConnection(stringConnection);
try
{
con2.Open();
SqlCommand sqlCmd2 = new SqlCommand();
sqlCmd2.Connection = con2;
sqlCmd2.CommandType = CommandType.Text;
sqlCmd2.CommandText = "SELECT name FROM sys.databases EXCEPT SELECT name FROM sys.databases WHERE name='master' OR name='model' OR name='msdb' OR name='tempdb' OR name=''";
SqlDataAdapter sqlDataAdap2 = new SqlDataAdapter(sqlCmd2);
DataTable dtRecord2 = new DataTable();
sqlDataAdap2.Fill(dtRecord2);
dtRecord2.DefaultView.Sort = "name ASC";
comboBox2.DataSource = dtRecord2;
comboBox2.DisplayMember = "NAME";
comboBox2.DisplayMember = "NAME";
con2.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedbase = this.comboBox2.GetItemText(this.comboBox2.SelectedItem);
String strConnection = @"Data Source=SERVER_NAME;Initial Catalog =" + selectedbase+ "; User ID =user; Password =pass;";
using (SqlConnection con = new SqlConnection(strConnection))
try
{
con.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = con;
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Select table_name from information_schema.tables";
SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);
DataTable dtRecord = new DataTable();
sqlDataAdap.Fill(dtRecord);
dtRecord.DefaultView.Sort = "table_name ASC";
ComboBox1.DataSource = dtRecord;
ComboBox1.DisplayMember = "TABLE_NAME";
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我的钱在字符串selectedbase上,用于连接字符串 . 但如果这确实是问题,我不知道如何解决它 .