尝试在C#中执行查询时,列名“master”无效

时间:2016-03-26 03:38:06

标签: c# sql-server

我正在尝试从本地服务器中的所有数据库中获取所有备份。我找到了这个SQL代码:

select a.backup_set_id, a.server_name, a.database_name, a.name, a.user_name, a.position, a.software_major_version, a.backup_start_date, backup_finish_date, a.backup_size, a.recovery_model, b.physical_device_name 
from msdb.dbo.backupset a join msdb.dbo.backupmediafamily b on a.media_set_id = b.media_set_id 
where a.database_name = 'AdventureWorksLT2008' order by a.backup_finish_date desc

在SQL Server中,它返回我拥有的所有备份,但是当我尝试在Visual Studio中的应用程序中使用它时,它给了我这个错误:

System.Data.dll中出现未处理的“System.Data.SqlClient.SqlException”类型异常

其他信息:无效的列名称“master”。 (掌握在其中一个数据库中)。

这是我的代码:

 private void listBackUps()
        {
            foreach (string str in listaDB)
            {
                string query1 = "select a.backup_set_id, a.server_name, a.database_name, a.name, a.user_name, a.position, a.software_major_version, a.backup_start_date, backup_finish_date, a.backup_size, a.recovery_model, b.physical_device_name ";
                string query2 = query1 + "from msdb.dbo.backupset a join msdb.dbo.backupmediafamily b on a.media_set_id = b.media_set_id ";
                string query3 = query2 + "where a.database_name = " + str + " order by a.backup_finish_date desc";
                SqlCommand cmd = new SqlCommand(query3, connection);
                cmd.ExecuteNonQuery();
                cbBackUps.Items.Add(new ComboBoxItem { Content = str + " BackUp" });

            }

        }

cbBackUps是一个ComboBox,我想存储所有备份。

谢谢!

1 个答案:

答案 0 :(得分:1)

有几点需要注意。

请尝试在c#中使用参数化查询 Kindly review

如果您使用内联查询,则必须使用字符串生成器构建查询Kindly review

替换

  

其中a.database_name =“+ str +”按

排序

  

其中a.database_name ='“+ str +”'按

排序

因为SQL将您的“+ str +”视为列名。