【发布时间】:2022-01-07 10:05:16
【问题描述】:
所以这很奇怪。我正在尝试从我的 C# 应用程序到我的本地数据库进行简单的选择,但它不起作用。我知道查询是正确的,而且我的连接也有效,因为我能够进行插入。我想要的是能够将我的数据从选择中放入数据表中。很简单,以前做过,现在不行了……
这是我提到的两个查询:
"SELECT idUsuario
FROM taxi.dbo.Usuario
WHERE nombre = '" + usuario + "'"
其中usuario 是数据库中存在的实际名称。这个不行。
但是,这个可行:
USE [Taxi]
INSERT INTO [dbo].[Usuario]([nombre], [correo], [tlf],[metodo_pago], [contrasena])
VALUES('" + usuario.nombre + "','" + usuario.correo + "','" + usuario.tlf + "','" + usuario.tarjeta + "', '" + usuario.contrasena + "')"
我的完整代码:
public DataTable ejecutaConsultaDataTable(String consulta)
{
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
SqlCommand c = new SqlCommand(consulta, con); //Defino la consulta a realizar.
try
{
this.connection(); // Abro la conexión
da.SelectCommand = c;
da.Fill(dt); // relleno tabla con el resultado de la consulta
this.closeConnection();
return dt;
}
catch //(Exception ex) // Tratamiento de errores en la conexión
{
this.closeConnection(); // Cierro conexión
return null;
}
}
public int ejecutaConsulta(String consulta)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand c = new SqlCommand(consulta, con); //Defino la consulta a realizar.
try
{
this.connection(); // Abro la conexión
da.SelectCommand = c;
c.ExecuteNonQuery();
this.closeConnection();
return 0;
}
catch //(Exception ex) // Tratamiento de errores en la conexión
{
this.closeConnection(); // Cierro conexión
return -1;
}
}
这是我使用的代码:
consulta == query
con == connection
谢谢你顺便说一句:)
【问题讨论】:
-
永远不要使用字符串连接来创建 SQL 命令。这使您的代码容易受到 SQL 注入攻击。改用参数化查询,
-
您能否更具体地说明“不起作用”的确切含义?
-
请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。 (不:它不能经常重复)
-
您正在捕获异常,但您已经删除了可以告诉您传递的 sql 中有什么问题的代码。重新插入 Exception ex,然后以某种方式显示 ex.Message 属性的内容。然后我们可以试着去理解这个问题。 (显示取决于您编写的应用程序类型)
-
顺便说一下,似乎 usuario 是某个类的实例,而 nombre 属性包含要搜索的数据。连接变量 usuario 的名称不会为您提供 nombre 属性。但是,请查看其他 cmets,不要使用串联来构建查询。
标签: c# sql select datatable insert