C#:SqlServer操作的知識點


 

 



1、檢查數據庫連接的有效性 var client = new System.Net.Sockets.TcpClient(); var ar = client.BeginConnect(host, 1433, null, null); ar.AsyncWaitHandle.WaitOne(500); return client.Connected; client.Close(); 2、檢查連接字符串是否可以連接數據庫 SqlConnection _connection; if (_connection == null) { _connection = new SqlConnection(ConnectionString); _connection.Open(); } else if (_connection.State == System.Data.ConnectionState.Closed) { _connection.Open(); } else if (_connection.State == System.Data.ConnectionState.Broken) { _connection.Close(); _connection.Open(); } return _connection; 3、判斷是否存在某表的某個字段 string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'"; using (SqlCommand cmd = new SqlCommand(sql , Connection)) { object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } Connection.Close(); 4、執行查詢語句,返回SqlDataReader ( 注意:調用該方法后,一定要對SqlDataReader進行Close ) SqlCommand cmd = new SqlCommand(strSQL, Connection); SqlDataReader reader= cmd.ExecuteReader(CommandBehavior.CloseConnection); if (reader.Read()) { reader["columnName"].ToString(); } reader.Close(); Connection.Close(); 5、執行查詢語句,返回DataSet DataSet ds = new DataSet(); SqlDataAdapter command = new SqlDataAdapter(SQLString, Connection); command.Fill(ds, "ds"); Connection.Close(); 6、 執行SQL語句,返回影響的記錄數 SqlCommand cmd = new SqlCommand(); if (conn.State != ConnectionState.Open) { conn.Open(); } cmd.Connection = conn; cmd.CommandText = sql; if (trans != null) { cmd.Transaction = trans; } cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (SqlParameter parameter in cmdParms) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } cmd.Parameters.Add(parameter); } } int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; conn.Close(); 7、批量復制數據、插入數據,實現數據庫事務 if (conn.State != ConnectionState.Open) { conn.Open(); } SqlTransaction trans = conn.BeginTransaction(); //定義批量處理對象 SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, trans); foreach (DataColumn item in dataTable.Columns) { bulkCopy.ColumnMappings.Add(item.ColumnName, item.ColumnName); } //指定被操作的數據表名 bulkCopy.DestinationTableName = tableName; bulkCopy.BatchSize = size; bulkCopy.BulkCopyTimeout = 50; //數據插入到數據庫 bulkCopy.WriteToServer(dataTable); bulkCopy.Close(); bool isSuccess = ture; if (isSuccess) { trans.Commit(); } else { trans.Rollback(); } 8、執行存儲過程 DataSet dataSet = new DataSet(); SqlDataAdapter sqlDA = new SqlDataAdapter(); SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { if (parameter != null) { // 檢查未分配值的輸出參數,將其分配以DBNull.Value. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } command.Parameters.Add(parameter); } } sqlDA.SelectCommand = command; //sqlDA.SelectCommand.CommandTimeout = Times; sqlDA.Fill(dataSet, tableName); Connection.Close(); //command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); //rowsAffected = command.ExecuteNonQuery(); //result = (int)command.Parameters["ReturnValue"].Value; 9、備份數據庫 SqlCommand command = new SqlCommand("use master;backup database @name to disk=@path;", Connection); command.Parameters.AddWithValue("@name", dbName); command.Parameters.AddWithValue("@path", pathDB); //command.Parameters.AddWithValue("@pathLog",pathLog); num = command.ExecuteNonQuery(); Connection.Close(); 10、恢復sql server數據庫 SqlCommand command = new SqlCommand("use master;restore database @name from disk=@path WITH replace;", Connection); command.Parameters.AddWithValue("@name", dbName); command.Parameters.AddWithValue("@path", pathDB); //command.Parameters.AddWithValue("@pathLog",pathLog); num = command.ExecuteNonQuery(); Connection.Close(); 11、加載Excel string strConn; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; OleDbConnection OleConn = new System.Data.OleDb.OleDbConnection(strConn); OleConn.Open(); System.Data.DataTable sheetNames = OleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });//獲得Excel 表的架構信息 String sql = "SELECT * FROM [" + sheetNames.Rows[0]["TABLE_NAME"] + "]";//可是更改Sheet名稱,比如sheet2,等等 OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); DataSet OleDsExcle = new DataSet(); OleDaExcel.Fill(OleDsExcle); OleConn.Close(); return OleDsExcle;

 特別操作

1、獲取全部數據庫名稱

        ArrayList DBNameList = new ArrayList();
            SqlConnection Connection = new SqlConnection(String.Format("Data Source={0};Initial Catalog=master;User ID={1};PWD={2}", DSN, UID, PWD));
            DataTable DBNameTable = new DataTable();
            SqlDataAdapter Adapter = new SqlDataAdapter("select name from master..sysdatabases", Connection);
            Adapter.Fill(DBNameTable);

            foreach (DataRow Row in DBNameTable.Rows)
            {
                DBNameList.Add(Row[0]);
            }


2、得到指定數據庫中的全部表名稱

          string constr = String.Format("Data Source={0};Initial Catalog={1};User ID={2};PWD={3}", DSN, dbname, UID, PWD);
            SqlConnection myConnection = new SqlConnection(constr);
            //根據選中數據庫,得到相應的所有表 
            string strSQL = "select name from sysobjects where type='" + 'U' + "'";
            DataSet ds = new DataSet();
            SqlDataAdapter myCommand = new SqlDataAdapter(strSQL, myConnection);
            myCommand.Fill(ds, "table");
            List<string> tableName = new List<string>();
            DataTable dt = ds.Tables[0];
            foreach (DataRow item in dt.Rows)
            {
                tableName.Add(item[0].ToString());
            }
3、SQL變量

   SqlCommand cmd = new SqlCommand(sql, sqlCon);
   SqlParameter para = new SqlParameter("@UHDATA", SqlDbType.Image);
   para.Value = UHDATA;    //UHDATA 變量是 byte[]
   cmd.Parameters.Add(para);

 

 

1、更加數據庫連接和sql語句獲取字段值

        private string GetFieldStringValue(OleDbConnection oleconn, string ASqlStr)
        {
            string strResult = string.Empty;
            OleDbCommand comTemp = new OleDbCommand(ASqlStr);
            comTemp.Connection = oleconn;
            OleDbDataReader readerTemp = comTemp.ExecuteReader();
            if (readerTemp.HasRows)
            {
                readerTemp.Read();
                strResult = readerTemp.GetString(0);
            }
            readerTemp.Close();
            return strResult;
        }

 

 

參考:double數組轉為image類型(即byte[])

        public byte[] GetDoubleToByte(double[] d)
        {
            int size = Marshal.SizeOf(d[0]) * d.Length;
            IntPtr pnt = Marshal.AllocHGlobal(size);
            try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(d, 0, pnt, d.Length);

                // Copy the unmanaged array back to another managed array.
                byte[] managedArray2 = new byte[d.Length * 8];

                Marshal.Copy(pnt, managedArray2, 0, d.Length * 8);
                return managedArray2;
            }
            finally
            {
                // Free the unmanaged memory.
                Marshal.FreeHGlobal(pnt);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM