C# 对象或列名丢失或为空

C# 对象或列名丢失或为空,c#,sql-server,C#,Sql Server,我在C中遇到了这个问题,我已经在SQL Server中运行了这个查询,并且可以正常工作 SQL查询 SELECT Mineria.dbo.Usuario.ID_Usuario, Mineria.dbo.Usuario.Sexo, Mineria.dbo.Usuario.Idioma, Mineria.dbo.Usuario.Edad, Mineria2.dbo.ARTISTA.Nombre_artistic INTO Mineria.dbo.Objeto FROM Mineria.dbo.Usu

我在C中遇到了这个问题,我已经在SQL Server中运行了这个查询,并且可以正常工作

SQL查询

SELECT Mineria.dbo.Usuario.ID_Usuario, Mineria.dbo.Usuario.Sexo, Mineria.dbo.Usuario.Idioma, Mineria.dbo.Usuario.Edad, Mineria2.dbo.ARTISTA.Nombre_artistic
INTO Mineria.dbo.Objeto
FROM Mineria.dbo.Usuario
INNER JOIN Mineria2.dbo.ARTISTA ON Mineria2.dbo.ARTISTA.Id_Artista=Mineria.dbo.Usuario.ID_Usuario
AND Mineria.dbo.Usuario.ID_Usuario BETWEEN 35 AND 70
ORDER BY ID_Usuario ASC
我在c代码上找不到问题

SqlCommand comando = new SqlCommand(string.Format("
Select '" + maskedTextBox1.Text + "' , '" + maskedTextBox2.Text + "' 
INTO Mineria.dbo.Objeto FROM Mineria.dbo.Usuario INNER JOIN Mineria2.dbo.ARTISTA ON Mineria2.dbo.ARTISTA.Id_Artista=Mineria.dbo.Usuario.ID_Usuario 
AND Mineria.dbo.Usuario.ID_Usuario BETWEEN '" + textBox1.Text + "' AND '" + textBox2.Text + "' ORDER BY ID_Usuario ASC"), cn);

这可能是因为在使用完全限定名的情况下,在字段名周围加上单引号应该是空的,而在BEFORED语句中的整数周围加上单引号应该是空的,因为它们是数字,而不是文本:

SqlCommand comando = new SqlCommand(string.Format("
Select " + maskedTextBox1.Text + " , " + maskedTextBox2.Text + " 
INTO Mineria.dbo.Objeto FROM Mineria.dbo.Usuario INNER JOIN Mineria2.dbo.ARTISTA ON Mineria2.dbo.ARTISTA.Id_Artista=Mineria.dbo.Usuario.ID_Usuario 
AND Mineria.dbo.Usuario.ID_Usuario BETWEEN " + textBox1.Text + " AND " + textBox2.Text + " ORDER BY ID_Usuario ASC"), cn);

调试是程序员工作的一部分。您是否尝试输出comando以检查它是否生成正确的语句?使用SQL参数以避免注入和格式错误也是如此。将其拆分为一个小的select…是的,这是一个SQL注入攻击,正在等待发生,您会发现,如果您使用参数,大多数此类问题都会通过降低复杂性自然得到解决Hi Alan!由于SQL注入,请不要在SQL脚本中使用字符串连接。您需要使用您可以在中看到的参数:[巨大的注入问题确实应该在这里得到解决。这是OP代码中的一个巨大安全漏洞,被利用只是时间问题。假设此代码可以从外部世界访问,是的。