using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient; 
using System.Data;
using MySQLDriverCS;
using System.Data.Odbc;
using System.Windows.Forms;namespace PhotoApplication
{
    class DatatBaseDeal
    { 
        public DatatBaseDeal() { }
        public int RunMySQL(string sql)
        {
            MySQLConnection conn = null;
            MySQLCommand commn = null;
            int data = 0;
            try
            {
                conn = new MySQLConnection(new MySQLConnectionString("localhost", "photo", "root", "", 3309).AsString);
                conn.Open();
                commn = new MySQLCommand(sql, conn);
                data = commn.ExecuteNonQuery();
                MessageBox.Show(data.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
            }
            return data;
        }       /// <summary>
       /// 查询编号
       /// </summary>
       /// <returns></returns>
        public Boolean selectGround(string str)
        {
            //string sql = "select '" + str + "' from ground";
            string sql = "select count(ground_number) from ground where ground_number = 'aaa-11'";
            int resultDeal = RunMySQL(sql);
            if (resultDeal == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}查询不到数据,数据库里面绝对有数据!请高手帮忙啊

解决方案 »

  1.   

    改为: data = (int)commn.ExecuteScalar();
      

  2.   

    建议使用存储过程,在SQl的环境中先测试好,然后再到 C# 中加入参数进行调用就行了。
    存储过程可以防止注入,并且它的过滤是在服务器上进行的,当数据量太大时,在本地进行的话,会先将服务器上的所有数据传送到本地机,然后进行过滤和显示,这样做太消耗带宽和内存。
      

  3.   

    sql语句在数据库sql查询器能得到查询结果?
      

  4.   

    对于 Update、Insert 和 Delete 语句,返回值为该命令---commn.ExecuteNonQuery()所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
      

  5.   

    data = commn.ExecuteNonQuery();这个data返回的是受影响的行数,适用于update或者insert,查询select是没用的。
    你要用commn.ExecuteScalar();
      

  6.   

     需要从SQL查询中返回一个值,如表中记录数。可以使用ExecuteScalar()方法,这个方法只返回一个值。
    using System.Data;
    using System.Data.SqlClient;namespace ExecuteScalar
    {
        class Program
        {
            static void Main(string[] args)
            {
                SqlConnection thisConnection = new SqlConnection(
         @"Data Source=scott;Initial Catalog=northwind;Persist Security Info=True;User ID=sa;Password=sa123");            thisConnection.Open();            SqlCommand thisCommand = thisConnection.CreateCommand();
                thisCommand.CommandText = "select count(*) from customers";            //ExecuteScalar:执行只返回一个值的SQL命令。
                object countResult = thisCommand.ExecuteScalar();
                Console.WriteLine("Count of Customers={0}",countResult);            Console.ReadLine();            thisConnection.Close();
            }
        }
    }
      

  7.   

    如果是控制台为什么有MessageBox.Show()?
    如果是winform为什么有Console.Write()?
    没搞明白楼主是做的哪种程序。。
     public Boolean selectGround(string str)
            {
                //string sql = "select '" + str + "' from ground";
                string sql = "select count(ground_number) from ground where ground_number = 'aaa-11'";
                int resultDeal = RunMySQL(sql);
               if(resultDeal!=0)
               {Console.Write(result.ToString());}
            }
      

  8.   

    对了,commn.ExecuteNonQuery()他是针对非查询的Insert,update,delete用的,查询的话可以用ExecuteScalar()返回第一行记录或者ExecuteReader(),通过reader.GetString(index)获取到你要取的数据库中对应字段的值
      

  9.   

    ExecuteReader()方法将SQL语句发送给SqlConnection并生产一个SqlDataReader类对象,该SqlDataReader对象包含SQL命令返回的数据;
    ExecuteScalar()方法执行SQl查询,并返回查询结果集中的第一行的第一列
    int count= (int)cmd.ExecuteScalar();
      

  10.   

    commn.ExecuteNonQuery()返回的是影响的行数,
    要查询到数据库中的数据可以用
    mySqlDataAdapater da=new mySqlDataAdapater (cmd);DataTable dt=new DataTable();da.fill(dt);此时dt中就会有数据