如何使用MySql运行DataTable c#

时间:2014-05-25 11:23:33

标签: c# mysql winforms datatable

我不明白c#中的dataTable是如何工作的,这是我的问题:

我有选择,这个选择给我一个ID,见

 string query = "SELECT ID FROM USERS WHERE NAME = 'WILL'";
 MySqlCommand cmd = new MySqlCommand(query, conn);
 MySqlDataAdapter da = new MySqlDataAdapter(cmd);

我不知道如何获得此ID并在其他选择中使用

选择结果:

 ID = 23 // ID is result of first select

使用其他选择结果的新选择:

 SELECT NAME FROM USERS WHERE ID = @ID
 cmd.Parameters.AddWithValue("@ID", ID);

我是怎么做到的?

1 个答案:

答案 0 :(得分:0)

由于您的查询返回一个单元格,因此您可以使用ExecuteScalar方法。看起来在这种情况下您不需要使用MySqlDataAdapter

  

执行查询,并返回第一行的第一列   查询返回的结果集。

int id = (Int32)cmd.ExecuteScalar(); //id will be 23

然后你可以用它作为;

 cmd.Parameters.AddWithValue("@ID", id);

当然你可以在这里使用MySqlDataAdapter。您可以使用 while语句.Read()方法,并获得第一列值。但ExecuteScalar在一行中执行这些操作。

  

我尝试使用int16但只适用于int32,为什么?

ExecuteScalar方法将此值返回为object。这就是为什么这是拳击/拆箱问题。来自documentation;

  

取消装箱是从类型对象到值的显式转换   键入或从接口类型到实现该类型的值类型   接口。拆箱操作包括:

     
      
  • 检查对象实例以确保它是盒装值   给定的值类型

  •   
  • 将实例中的值复制到value-type变量中。

  •   

另外

  

要使值类型的取消装箱在运行时成功,则该项目为   unboxed必须是对先前创建的对象的引用   通过装箱该值类型的实例。试图取消装箱null   导致NullReferenceException。 尝试取消对...的引用   不兼容的值类型会导致InvalidCastException

在您的情况下,您的23值已装箱。默认情况下它是int。但是你试图将一个不是int的变量取消装箱。这不是有效的操作。你不能一步到位。

例如,这将是一个有效的操作;

Int16 id = (Int16)(Int32)cmd.ExecuteScalar(); // valid