Code Bye

这样执行MySQL语句对吗,还有更简练的方法吗

总觉得这样用起来很蛋疼,每执行一次语句都要 close一下,否则报错。
再者C#的string 是什么编码,这里对于 select* 出来的结果会不会自动转码?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
using System.Collections;
using System.Configuration;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
class SimpleDialog : Form
{
    public static void Main()
    {
        //   String mysqlStr = "server = localhost; user id=root; database=mysql; port=3306; password=1";
        // String mysqlStr = "Database=test;Data Source=127.0.0.1;User Id=root;Password=1;pooling=false;CharSet=utf8;port=3306";
        String mysqlStr = "Database=test;Data Source=127.0.0.1;User=root;Password=1;port=3306";//pooling=false;CharSet=utf8;
        MySqlConnection mycon = new MySqlConnection(mysqlStr);
        mycon.Open();
        MySqlCommand command = new MySqlCommand("create table student (姓名 varchar(255), 语文 int, 数学 int, 英语 int)", mycon);
        MySqlDataReader reader = command.ExecuteReader();
        reader.Close();
        command = new MySqlCommand("insert into  student values("喜羊羊",100,90,80)", mycon);
        reader = command.ExecuteReader();
        reader.Close();
        command = new MySqlCommand("insert into  student values("懒羊羊",20,20,20)", mycon);
        reader = command.ExecuteReader();
        reader.Close();
        command = new MySqlCommand("insert into  student values("慢羊羊",99,99,99)", mycon);
        reader = command.ExecuteReader();
        reader.Close();
        command = new MySqlCommand("select*from student", mycon);
        reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                if (reader.HasRows)
                {
                    Console.WriteLine(reader.GetString(0) + "\t" + reader.GetInt32(1) + "\t" + reader.GetInt32(2));
                }
            }
        }
        catch (Exception)
        {
            Console.WriteLine("查询失败了!");
        }
        reader.Close();
        mycon.Close();
    }
   
}

解决方案

2

你又不要读取数据,insert用ExecuteNonQuery就行了。
reader也用不着调Close

2

  using ( SqlConnection myConnection = new   SqlConnection( connString ))  
  {  
    using ( SqlCommand mySqlCommand = new  SqlCommand( commandString, myConnection ))  
    {  
      myConnection.Open();  
      mySqlCommand.ExecuteNonQuery();  
    }  
  }

2

引用:
Quote: 引用:
  using ( ******)  
  {  
  //////
  
  }

这 using 是什么意思

https://msdn.microsoft.com/zh-cn/library/yh598w02.aspx
using语句,一个语法而已。

2

引用:
Quote: 引用:
  using ( ******)  
  {  
  //////
  
  }

这 using 是什么意思

此处的using作用是该段代码执行完成,自动回收资源,

2

可以参考下linq to sql 很方便。用起来也挺爽

2

想软件稳固系统资源少用点,资源回收就得考虑

2

引用:
Quote: 引用:

想软件稳固系统资源少用点,资源回收就得考虑

C#不是和Java一样自动回收垃圾吗。C/C++才是人工手动的!

这就是你一直以来占着数据库连接和文件句柄不释放,趴着茅坑不拉屎的原因?

2

看需求,不能说你这里有没有什么错。假如是学习,可以百度个帮助类。例如sqlhelper,就是一个很不错的参考代码。

4

用错了呗,你执行插入的那些干嘛要用返回reader的?可以直接用不返回的啊,就是带有Non的那个。

2

引用:
Quote: 引用:

想软件稳固系统资源少用点,资源回收就得考虑

C#不是和Java一样自动回收垃圾吗。C/C++才是人工手动的!

是自动,但回收时间不确定,假如你短时间new大量包含非托管资源的对象,有可能就来不及释放直接内存溢出了,所以要养成即时释放的好习惯


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这样执行MySQL语句对吗,还有更简练的方法吗