我有以下查询
SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'ptbs.ms_karyawan'
并在mysql wamp上执行它们,它返回2列
但是,当我使用C#执行上面的查询时,它返回-1列,这里是代码
private void button1_Click(object sender, EventArgs e)
{
int table = dbc.Count("ptbs.ms_karyawan");
msg.Sukses("Jumlah table adalah :"+table, "Login");
}
这是dbc.count()
代码
public int Count(string table_name)
{
string query = "SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '"+table_name+"'";
int table = 0;
if (OpenConnection() == true)
{
//create mysql command
MySqlCommand cmd = new MySqlCommand();
//Assign the query using CommandText
cmd.CommandText = query;
//Assign the connection using Connection
cmd.Connection = connection;
//Execute query
table = cmd.ExecuteNonQuery();
//close connection
this.CloseConnection();
}
return table;
}
为什么他们返回不同的值,虽然我使用相同的查询?我做错了什么 ?
答案 0 :(得分:3)
您需要执行Executescalar
方法
var retVal = cmd.Executescalar();
table = Convert.ToInt32(retVal);
ExecuteNonQuery
仅返回受影响的行数。
但是Executescalar
返回查询返回的结果集中第一行的第一列
如果您需要有关从ExcureScalar返回的铸造价值的更多信息,请查看以下SO答案
答案 1 :(得分:0)
您正在使用MySQLClient.ExecuteNonQuery执行查询ExecuteNonQuery
用于运行INSERT
或UPDATE
语句,而不是SELECT
。因此,您不会影响任何行,并获得-1的结果。您需要执行查询,以便获得结果集,以便从中读取count ( * ) COLUMN_NAME
的值。