C# 连接 SQL Server 2008 基础操作+数据库增删改查

时间:2022-09-15 23:11:35
本人菜鸟,记录初次使用C#操作数据库时遇到的问题,各解决方案很多网络查阅资料,只是重新整合。

1、安装数据库

SQLServer2008下载:http://www.jb51.net/softs/43885.html

破解码:PTTFM-X467G-P7RH2-3Q6CG-4DMYB

安装:https://jingyan.baidu.com/article/948f592434b407d80ef5f97d.html


2,、启动SQLServer2008,连接数据库服务器

如果遇到连接失败问题,可参见http://www.jb51.net/article/59352.htm

如果在修改“SQL Server网络配置”过程中无内容,建议重装数据库。

登陆服务器名称为“local”,身份验证为“Windows身份验证”。初次登陆成功后,“对象资源管理器”中无内容,尚不知道原因,再次连接后,其出现本地数据库相应信息。

SQLServer身份验证登陆方法,可参见http://www.2cto.com/database/201308/232907.html

关于数据库中简单操作,推荐连接,还不错的一个例子:https://wenku.baidu.com/view/95e34d4c48d7c1c708a145b7.html

过程中有可能会遇到:https://jingyan.baidu.com/article/03b2f78c4c32ad5ea237ae0b.html

MS SQL Server 2008 在建完表后,如果要插入任意列,则提示:
当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。                                                  
工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧)
 把钩去掉,就可以了



3.连接数据库

具体方法可参见:https://jingyan.baidu.com/article/d169e186b0a432436611d8d2.html


4.增删改查

4.1增

        /// <summary>
        /// 增加数据库内容--设备错误代码表
        /// </summary>
        /// <param name="sheetName"></param>
        /// <param name="str1">本数据库中表示DeviceID</param>
        /// <param name="str2">本数据库中表示DeviceErrorCode</param>
        public int addData(string sheetName, string str1, string str2)
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("insert into " + sheetName + " values('" + str1 + "','" + str2 + "')", conn);
            try
            {
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (SqlException e)
            {
                conn.Close();
                return e.Number;
            }
            return 1;

        }
根据数据库内容不同,需要编写不同参数的addData函数以进行重载,是否有更便捷方式。日后跟进。

4.2删

        /// <summary>
        /// 删出数据库内容
        /// </summary>
        public void delete(string sheetName,string columnName,string deleteData)
        {
            conn.Open();//打开数据库
            SqlCommand cmd = new SqlCommand("delete from " + sheetName + " where " + columnName + "='" + deleteData + "'", conn);
            cmd.ExecuteNonQuery();
            conn.Close();//关闭数据库
        }

编程时遇到问题:DELECT语句与REFERENCE约束 冲突

解决方法:删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

如图:

C# 连接 SQL Server 2008 基础操作+数据库增删改查


4.3改

        /// <summary>
        /// 更新数据库某值,UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
        /// </summary>
        /// <param name="sheetName">表名称</param>
        /// <param name="columnName1">欲被修改列名称</param>
        /// <param name="newValue">新值</param>
        /// <param name="columnName2">定位列</param>
        /// <param name="targetValue">定位列值</param>
        /// <returns></returns>
        public int update(string sheetName, string columnName1, string newValue,string columnName2,string targetValue)
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("update " + sheetName + " set " + columnName1 + "='" + newValue + "' where " + columnName2 + "='" + targetValue + "'", conn);
            if (dataExist(sheetName, columnName2, targetValue))
            {
                try
                {
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }
                catch (SqlException e)
                {
                    conn.Close();
                    return e.Number;
                }
                return 1;
            }
            else 
            {
                conn.Close();
                return 0;
            }
  
        }
        
        /// <summary>
        /// 判断数据是否存在于数据库中
        /// </summary>
        /// <param name="sheetName">表名称</param>
        /// <param name="columnName">列名称</param>
        /// <param name="data">查找数据名称</param>
        /// <returns></returns>
        private bool dataExist(string sheetName, string columnName,string data)
        {
            //conn.Open();//打开数据库
            SqlCommand myCmd = new SqlCommand("select count(*) from "+sheetName+" where "+columnName+"='"+data+"'", conn);
            //int n = myCmd.ExecuteNonQuery();
            int n = int.Parse(myCmd.ExecuteScalar().ToString());
            //conn.Close();
           
            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

存在问题:因为不知如何获取是否从数据库中查到要求数据的信息,故想先查询数据中是否有该数据。但感觉效率很低。日后跟进。

4.4查

        /// <summary>
        /// 查找表中所有数据
        /// </summary>
        /// <param name="sheetName">表名称</param>
        /// <returns></returns>
        public DataSet select(string sheetName)
        {
            //查找所有设备状态信息
            SqlCommand cmd = new SqlCommand("select * from "+sheetName, conn);
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            DataSet dataSet = new DataSet();
            sda.Fill(dataSet, "cs");
            return dataSet;
        }

        /// <summary>
        /// 查找某一数据相关
        /// </summary>
        /// <param name="sheetName">表名称</param>
        /// <param name="columnName">查找列</param>
        /// <param name="data">查找列中某一数据</param>
        /// <returns></returns>
        public DataSet select(string sheetName,string columnName,string data)
        {
           
            SqlCommand cmd = new SqlCommand("select * from " + sheetName + " where " + columnName + " in ('" + data + "')", conn);
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            DataSet dataSet = new DataSet();
            sda.Fill(dataSet, "cs");
           return dataSet;
        }