所以这很奇怪。我正试图从我的C#应用程序到我的本地数据库做一个简单的选择,但它不起作用。事实上,我知道查询是正确的,而且我的连接也能工作,因为我可以进行插入。我想要的是能够将select中的数据放入DataTable中。很简单,以前做过,但现在不起作用。。。
这是我提到的两个问题:
"SELECT idUsuario
FROM taxi.dbo.Usuario
WHERE nombre = '" + usuario + "'"
其中CCD_ 1是数据库中存在的实际名称。这个不管用。
然而,这个有效:
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
谢谢BTW:(
如果你想使用数据表,下面是如何让生活变得简单和安全:
- 向项目中添加新的数据集文件
- 双击打开它,右键单击曲面并选择"添加TableAdapter">
- 通过向导,输入连接字符串,然后输入查询
- 每当您想要SQL字符串中的某个参数时,请在参数名称前加上@,将其键入向导中,如下所示:
SELECT * FROM taxi.dbo.Usuario WHERE nombre = @usuario
- 当你有一个有参数的查询时,一定要给它起一个好名字,比如";FillByUsuario"-不要将其保留为默认值";填充";或";FillBy">
- 每当您想要SQL字符串中的某个参数时,请在参数名称前加上@,将其键入向导中,如下所示:
- 完成向导
您将看到数据库表的表示形式出现,可能与表适配器(UsuarioTableAdapter(一起被称为Usuario。如果你查看表适配器的属性,你会发现它有一个InsertCommand(以及一个用于更新、删除的(,已经为你填写好了,还有参数。。VS为您编写了大量优秀的代码(如果您想查看,这些代码都在YourDataSet.Designer.cs文件中
要使用代码中的这些新东西,只需执行以下操作:
var ta = new UsuarioTableAdapter();
var dt = ta.GetDataByUsuario("hello, put a usuario here");
这就是你要做的全部
如果您想进行更改,并将其保存到数据库:
dt[0].Nombre = "John";
dt[0].Correo = "1, the street";
ta.Update(dt);
您可以向表适配器添加任意数量的查询,但它们应该与表相关。右键单击UsuarioTableAdapter,然后选择"添加查询"。添加另一个,可能是SELECT * FROM Usuario WHERE Correo LIKE @correo
,称之为FillByCorreo/GetDataByCorreo。从代码中调用它,如:
var dt = ta.GetDataByCorreo("% address here %");