下面是我的程式其中的code
private static string Constr = @"Data Source=*.*.*.*;Initial Catalog=****;Persist Security Info=True;User ID=***;Password=***";
private static string Constr2 = @"Data Source=*.*.*.*;Persist Security Info=True; User ID= *;Password=*;";
string sql = @"SELECT TOP 1 * FROM ***** ORDER BY DataTime DESC";
string sq2 = @"SELECT TOP 1 *** FROM **** WHERE DP_NO = '**' ORDER BY M_DateTime DESC";
DataTable dt = SqlCommand(sql);
DataTable dt2 = SqlCommand(sq2);
dt.Dispose();
dt2.Dispose();
protected static DataTable SqlCommand(string Sqlstr)
{
DataTable dt = new DataTable();
try
{
SqlConnection conn = new SqlConnection(Constr);
SqlDataAdapter da = new SqlDataAdapter(Sqlstr, conn);
da.Fill(dt);
conn.Close();
return dt;
}
catch (Exception ex)
{
return dt;
}
}
protected static DataTable SqlCommand2(string Sqlstr2)
{
DataTable dt2 = new DataTable();
try
{
SqlConnection conn2 = new SqlConnection(Constr2);
SqlDataAdapter da = new SqlDataAdapter(Sqlstr2, conn2);
da.Fill(dt2);
conn2.Close();
return dt2;
}
catch (Exception ex2)
{
return dt2;
}
}
裡面有一些我一些功能我就省略沒貼了
只是我爬文後結果是連兩個資料庫要兩個字串,然後變數修改一下就好了
然後都有問題
兩個是不同資料庫IP,User,密碼,DB,都不同
沒用過c# 直接寫sql,連接過兩個DB,一般會用設定在web.config的方式,
不過仔細看看你的程式碼,其實有個地方寫錯了,所以不會查詢正確,
另外DataTable為何需要宣告成全域變數?
web.config設定
<appSettings>
<add key="MSSQLConfig" value="Data Source=localhost;Initial Catalog=DB1;User ID=test1;Password=test1;Connect Timeout=1000;" />
<add key="MSSQL1Config" value="Data Source=localhost;Initial Catalog=DB2;User ID=test2;Password=test2;Connect Timeout=1000;" />
</appSettings>
程式碼調整
protected static DataTable SqlCommand(string Sqlstr)
{
DataTable dt = SqlCommand(sql); //這個沒有用到
DataTable dt = new DataTable(); //這是錯的
try
{
SqlConnection conn = new SqlConnection(Constr);
SqlDataAdapter da = new SqlDataAdapter(Sqlstr, conn);
da.Fill(dt);
conn.Close();
dt.Dispose(); //這個放置的位置,再自行測試
return dt;
}
catch (Exception ex)
{
return dt;
}
}
protected static DataTable SqlCommand2(string Sqlstr2)
{
DataTable dt2 = SqlCommand(sq2); //這個沒有用到
DataTable dt2 = new DataTable(); //這是錯的
try
{
SqlConnection conn2 = new SqlConnection(Constr2);
SqlDataAdapter da = new SqlDataAdapter(Sqlstr2, conn2);
da.Fill(dt2);
conn2.Close();
dt2.Dispose(); //這個放置的位置,再自行測試
return dt2;
}
catch (Exception ex2)
{
return dt2;
}
}
我是用WinForm
去連接資料庫的
不是Web
謝謝回答
原來如此,所以那樣調整有達到你的需求?
【另外DataTable為何需要宣告成全域變數?】
public static DataTable dt2 = new DataTable();
有嗎?
宣告在function外,對這個class而言就是全域的變數啊
謝謝回答
不過沒幫倒忙
我已經有
protected static DataTable SqlCommand(string Sqlstr)
所以不用
DataTable dt = SqlCommand(sql)
他會秀Bug說已經有了
程式碼調整
private static string Constr = @"Data Source=*.*.*.*;Initial Catalog=****;Persist Security Info=True;User ID=***;Password=***";
private static string Constr2 = @"Data Source=*.*.*.*;Persist Security Info=True; User ID= *;Password=*;";
string sql = @"SELECT TOP 1 * FROM ***** ORDER BY DataTime DESC";
string sq2 = @"SELECT TOP 1 *** FROM **** WHERE DP_NO = '**' ORDER BY M_DateTime DESC";
DataTable dt = SqlCommand(Constr,sql);
DataTable dt2 = SqlCommand(Constr2,sq2);
protected static DataTable SqlCommand(string constr, string Sqlstr)
{
DataTable dt = new DataTable();
try
{
using (SqlConnection conn = new SqlConnection(constr))
{
SqlDataAdapter da = new SqlDataAdapter(Sqlstr, conn);
da.Fill(dt);
}
}
catch (Exception ex)
{
throw;
}
return dt;
}
@ TWLuKe
正確解答~!
太感謝您了
可惜是留言 我無法標記您
不過我是把您給的幾乎複製貼上
其實不太懂我這樣會撈不到..怪怪
關鍵是 SqlCommand(Constr,sql);這個吧,另外
下面這兩個不是重覆宣告了嗎? 這樣會對?
DataTable dt = SqlCommand(Constr,sql);
DataTable dt = new DataTable();
錯誤訊息
您可以點 EX.Message
看看是什麼錯誤
按照您的圖
EX.Message
資料是空的?
位置 0
不知道您寫的完整 CODE
先告訴您 ==>Dispose明確與記憶體回收行程釋放unmanaged 的資源
dt.Dispose();
dt2.Dispose();
連接兩個資料庫,
要用兩個不同的SqlConnection,
請問您有用了嗎?
另外,
建議Catch的地方要用ex.ToString()將錯誤訊息讀出來,
要不然就只能擲杯了...