คุณจะตรวจสอบได้อย่างไรว่าเปิดหรือปิดที่ฉันใช้อยู่
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
แม้สถานะจะเป็น "เปิด" ก็ล้มเหลวในการตรวจสอบนี้
คุณจะตรวจสอบได้อย่างไรว่าเปิดหรือปิดที่ฉันใช้อยู่
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
แม้สถานะจะเป็น "เปิด" ก็ล้มเหลวในการตรวจสอบนี้
คำตอบ:
คุณควรใช้SqlConnection.State
เช่น,
using System.Data;
if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
// do something
// ...
}
using System.Data;
ในคำตอบ IMHO ฉันลืมเนมสเปซนี้ (มีusing System.Data.SqlClient
) และคิดไม่ออกว่าจะรับConnectionState
เป็นคีย์เวิร์ดได้อย่างไรจนกว่าฉันจะเพิ่มเข้าไป หวังว่านี่จะช่วยใครบางคนได้
if (myConnection == null || myConnection.State == ConnectionState.Closed) { //Connection is closed } else { //Connection is open in some way }
มั้ย? ด้วยวิธีนี้หากการเชื่อมต่อเป็นโมฆะมันจะ "ปิด" ด้วย
นี่คือสิ่งที่ฉันใช้:
if (mySQLConnection.State != ConnectionState.Open)
{
mySQLConnection.Close();
mySQLConnection.Open();
}
เหตุผลที่ฉันไม่ใช้แค่:
if (mySQLConnection.State == ConnectionState.Closed)
{
mySQLConnection.Open();
}
เป็นเพราะ ConnectionState สามารถ:
Broken, Connnecting, Executing, Fetching
นอกจาก
Open, Closed
นอกจากนี้ Microsoft ระบุว่าการปิดและเปิดการเชื่อมต่ออีกครั้ง "จะรีเฟรชค่าสถานะ" ดูที่นี่http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state(v=vs.110).aspx
mySQLConnection.State != ConnectionState.Open && mySQLConnection.State != ConnectionState.Connecting
จะหลีกเลี่ยงการรีเซ็ตด้วยการเชื่อมต่อที่ช้าหรือไม่?
เอกสาร. NET ระบุว่า: คุณสมบัติของรัฐ: การรวมกันของค่า ConnectionState ในระดับบิต
ดังนั้นฉันคิดว่าคุณควรตรวจสอบ
!myConnection.State.HasFlag(ConnectionState.Open)
แทน
myConnection.State != ConnectionState.Open
เนื่องจากสถานะสามารถมีหลายแฟล็ก
ตรวจสอบว่าการเชื่อมต่อ MySQL เปิดอยู่หรือไม่
ConnectionState state = connection.State;
if (state == ConnectionState.Open)
{
return true;
}
else
{
connection.Open();
return true;
}
return true;
? วางไว้ในตอนท้ายของวิธีการนอกif
/ else
!
คุณยังสามารถใช้สิ่งนี้
if (SQLCON.State == ConnectionState.Closed)
{
SQLCON.Open();
}
using System.Data;
สำหรับใครก็ตามที่ไม่รู้หรือไม่รู้ว่าทำไมมันถึงใช้ไม่ได้
รหัสนี้เป็นการป้องกันเล็กน้อยก่อนเปิดการเชื่อมต่อตรวจสอบสถานะ หากสถานะการเชื่อมต่อเสียเราควรพยายามปิด เสียหมายความว่าการเชื่อมต่อถูกเปิดไว้ก่อนหน้านี้และทำงานไม่ถูกต้อง เงื่อนไขที่สองกำหนดว่าต้องปิดสถานะการเชื่อมต่อก่อนที่จะพยายามเปิดอีกครั้งเพื่อให้สามารถเรียกรหัสซ้ำได้
// Defensive database opening logic.
if (_databaseConnection.State == ConnectionState.Broken) {
_databaseConnection.Close();
}
if (_databaseConnection.State == ConnectionState.Closed) {
_databaseConnection.Open();
}
ในการตรวจสอบสถานะการเชื่อมต่อฐานข้อมูลคุณสามารถทำได้ง่ายๆดังนี้
if(con.State == ConnectionState.Open){}
ในการตรวจสอบ OleDbConnection State ให้ใช้สิ่งนี้:
if (oconn.State == ConnectionState.Open)
{
oconn.Close();
}
State
ส่งคืนไฟล์ ConnectionState
public override ConnectionState State { get; }
นี่คือConnectionState
enum อื่น ๆ
public enum ConnectionState
{
//
// Summary:
// The connection is closed.
Closed = 0,
//
// Summary:
// The connection is open.
Open = 1,
//
// Summary:
// The connection object is connecting to the data source. (This value is reserved
// for future versions of the product.)
Connecting = 2,
//
// Summary:
// The connection object is executing a command. (This value is reserved for future
// versions of the product.)
Executing = 4,
//
// Summary:
// The connection object is retrieving data. (This value is reserved for future
// versions of the product.)
Fetching = 8,
//
// Summary:
// The connection to the data source is broken. This can occur only after the connection
// has been opened. A connection in this state may be closed and then re-opened.
// (This value is reserved for future versions of the product.)
Broken = 16
}
ฉันใช้ลักษณะต่อไปนี้ sqlconnection.state
if(conexion.state != connectionState.open())
conexion.open();
connectionState.open()
ไม่มีอยู่; คุณหมายถึงConnectionState.Open
?
SqlConnectionState
enum เป็น enum และไม่เปลี่ยนเป็นสตริง .....