1.我有一个表,里面有姓名,密码,和ID号,在一个新用户注册的时候输入姓名和密码,表中自动生成5位
数的ID号,以后再有新用户就是当前的ID号加一.这个功能该如何实现呢?2.我要向表中插入一个新的用户的信息的时候,可以输入部分空值吗? 例如:INSERT info VALUES(NULL,'张三','123456');3.我想将用户的ID和密码都保存在一个表里,在程序开始的时候运行连接命令连接上数据库,然后输入用户名密码,这个用户名密码通过查询数据库里表的信息来验证,如果用户名密码匹配则打开下一个窗体,这样做科学吗??或者说有什么更好的办法吗??4.接上一个问题,如果第一个窗体中数据库连接成功了,那么其他窗体是否还需要重新再建立个SQLCONNECTION对象连接呢??其他窗体上进行查询和插入删除操作时候的SQLCOMMAND对象的CONNECTION对象应该怎么写呢???以上问题是C#+ADO.NET SQL2000环境 编译器VS.NET2003先在这里谢谢大家了

解决方案 »

  1.   

    1- Identity为标识列,或插入时使用IDENTITY函数, 两者类似,一个是列,一个是函数2- 能否为空要看列的属性,PrimaryKey\UNIQUE列(约束,unique只能插入一个NULL值)不能插入NULL值.3- 这样做可以,大多数情况也都在这样做,至于是否科学不好说,自己慢慢摸索改进吧.4- 其他窗口还需要建立连接,即每次操作完数据后要断开连接(这是个好习惯,即便不显示的断开,ADO.NET也会自动断开)来释放占用服务器的资源.
    同样,在每个类(窗体)里的写法都一样 
    SqlConnection conn =new sqlConnection(ConnectionString);
    SqlCommand comm = new sqlCommand (SqlString, conn);
    .....
    conn.Open()
    comm.ExecuteNonQuery();
    conn.close();
      

  2.   

    to 1
    建议用INT的Auto_Increment来做,但是它满足不了每个ID都是5位;
    否则则需要自己写代码来生成,不管是数据库写成storeprocedure或ado.net,都是一样的。to 2
    如果采用INT的Auto_Increment方法来做的话,插入的时候,是不用给它赋值的,例如:
    insert yourtable (username, password) values( newusername, newpassword )
    否则,建议用storeprocedure来做to 3
    大致是这样的话,如果觉得直接把密码存在数据库,有些不安全的话,建议在加密后再存入数据库中to 4
    方法一:用全局变量,即static;
    方法二:主窗体在创建子窗体的时候,把sqlconnection引用传进去,不过需要修改childwindow的construction function:
    //Define your child window
    public class yourchildwindow( ref SqlConnection sqlConn ):System.Windows.Forms.Form