當前位置:首頁 » 數據倉庫 » winform訪問資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

winform訪問資料庫

發布時間: 2023-01-12 06:16:20

A. 請問你是如何實現c#winform訪問access資料庫,並用資料庫動態生成treeview節點的功能的

數據-添加數據源-資料庫-數據集-新建連接-更改-Access資料庫文件-一直下去就能訪問access資料庫,也能產生默認的鏈接串。
至於動態生成樹節點,需要寫代碼實現,沒有簡單的辦法。我這兒有一個不知道你能不能看懂。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Data.sqlClient;

namespace LanMsg.Common
{
public class ClassTreeView
{
private TreeView tv;

public ClassTreeView()
{
}
public ClassTreeView(TreeView TV)
{
tv = TV;
}

public int TreeType(TreeNode tn) //判斷節點類型
{
switch (tn.ImageIndex)
{
case 0:
case 1:
return 1;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 19:
return 2;
}
return 0;
}

public TreeNode FindNode(TreeNode tnParent, int DeptID)
{
if (tnParent == null)
return null;

if (TreeType(tnParent) == 1)
{

ClassDeptment tag = (ClassDeptment)tnParent.Tag;
if (tag.DeptID == DeptID) return tnParent;
}

TreeNode tnRet = null;
foreach (TreeNode tn in tnParent.Nodes)
{
tnRet = FindNode(tn, DeptID);
if (tnRet != null) break;
}
return tnRet;
}

public TreeNode FindNode(TreeNode tnParent, string UserID)
{
if (tnParent == null)
return null;

if (TreeType(tnParent) == 2)
{
ClassUserInfo tag = (ClassUserInfo)tnParent.Tag;
if (String.Equals(tag.UserID, UserID)) return tnParent;
}

TreeNode tnRet = null;
foreach (TreeNode tn in tnParent.Nodes)
{
tnRet = FindNode(tn, UserID);
if (tnRet != null) break;
}
return tnRet;
}

public void CloneTreeView(TreeView source, TreeView desti) //復制兩棵樹
{
for (int i = 0; i < source.Nodes.Count; i++)
{
desti.Nodes.Add((TreeNode)source.Nodes[i].Clone());
}
}

public void CloneTreeNode(TreeNode source, TreeNode desti) //復制兩個節點
{
for (int i = 0; i < source.Nodes.Count; i++)
{
desti.Nodes.Add((TreeNode)source.Nodes[i].Clone());
}
}

public void AddTree(TreeNode pNode, DataSet ds)//添加樹的節點
{
if (pNode == null)
{ //根節點
DataView dvTree = new DataView(ds.Tables["dept"]);
dvTree.RowFilter = "[PARENTID] = 1";
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
ClassDeptment dept = new ClassDeptment();
Node.ImageIndex = 0; //如果是單位,選擇圖像1
Node.SelectedImageIndex = 1;
dept.DeptID = Int32.Parse(Row["id"].ToString());
dept.Deptment = Row["name"].ToString();
Node.Tag = dept;
Node.Text = dept.Deptment;
tv.Nodes.Add(Node);
}
}
else
{
ClassDeptment dt = (ClassDeptment)pNode.Tag;
DataView dvTree = new DataView(ds.Tables["dept"]);
dvTree.RowFilter = "[PARENTID] = " + dt.DeptID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
ClassDeptment dept = new ClassDeptment();
Node.ImageIndex = 0; //如果是單位,選擇圖像1
Node.SelectedImageIndex = 1;
dept.DeptID = Int32.Parse(Row["id"].ToString());
dept.Deptment = Row["name"].ToString();
Node.Tag = dept;
Node.Text = dept.Deptment;
pNode.Nodes.Add(Node);
}

dvTree = new DataView(ds.Tables["user"]);
dvTree.RowFilter = "[deptID] = " + dt.DeptID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
ClassUserInfo user = new ClassUserInfo();
if (Int32.Parse(Row["state"].ToString()) == 0)
{
Node.ImageIndex = 19;
}
else
{
Node.ImageIndex = 2;
}
Node.SelectedImageIndex = 3;
user.UserID = Row["Staff_Name"].ToString();
user.UserName = Row["RealName"].ToString();
Node.Tag = user;
Node.Text = user.UserName;
pNode.Nodes.Add(Node);
}
}
}

public void AddTree(int ParentID, TreeNode pNode, DataSet ds)
{
DataView dvTree = new DataView(ds.Tables["dept"]);
DataView Tree = new DataView(ds.Tables["user"]);
//過濾ParentID,得到當前的所有子節點
if (pNode == null)
dvTree.RowFilter = "[ID] = 1" ;
else
dvTree.RowFilter = "[ID] <> 1 and [PARENTID] = " + ParentID;

foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
ClassDeptment dept = new ClassDeptment();
if (pNode == null)
{ //添加根節點

//記錄單位的ID和單位數據表
dept.DeptID = Convert.ToInt32(Row["id"]);
dept.Deptment = Row["name"].ToString();
Node.Tag = dept;
Node.Text = dept.Deptment;
Node.ImageIndex = 0;
Node.SelectedImageIndex = 1;
tv.Nodes.Add(Node);
AddTree(dept.DeptID, Node, ds); //再次遞歸
}
else
{ //添加當前節點的子節點
//記錄單位的ID和單位數據表
dept.DeptID = Convert.ToInt32(Row["id"]);
dept.Deptment = Row["name"].ToString();
Node.Tag = dept;
Node.Text = dept.Deptment;
Node.ImageIndex = 0;
Node.SelectedImageIndex = 1;
pNode.Nodes.Add(Node);

tv.SelectedNode = Node;

Tree.RowFilter = "[deptID] = " + Int32.Parse(Row["id"].ToString()); //增加部門人員
int i = 0;
foreach (DataRowView uRow in Tree)
{
TreeNode uNode = new TreeNode();
ClassUserInfo user = new ClassUserInfo();

//記錄人員的ID和人員數據表
user.UserID = uRow["Staff_Name"].ToString();
user.UserName = uRow["RealName"].ToString();
uNode.Tag = user;
uNode.Text = user.UserName;
uNode.ImageIndex = 2;
uNode.SelectedImageIndex = 3;

if (i == 0)
{
AddChildNode(uNode);
i++;
}
else
{
AddParent(uNode);
}
}

AddTree(dept.DeptID, Node, ds); //再次遞歸
}
}
}

public void AddChildNode(TreeNode tmp) //添加子節點
{
//首先判斷是否選定組件中的位置
if (tv.SelectedNode == null)
{
MessageBox.Show("請選擇一個節點", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (tmp.Text != "")
{
//在TreeView組件中加入子節點
tv.SelectedNode.Nodes.Add(tmp);
tv.SelectedNode = tmp;
tv.ExpandAll();
}
else
{
MessageBox.Show("必須有節點名稱!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
}

private void AddParent(TreeNode tmp) //添加父節點
{
//首先判斷是否選定組件中節點的位置
if (tv.SelectedNode == null)
{
MessageBox.Show("請選擇一個節點", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (tmp.Text != "")
{
//在TreeView組件中加入兄弟節點
tv.SelectedNode.Parent.Nodes.Add(tmp);
tv.ExpandAll();
}
else
{
MessageBox.Show("必須有節點名稱!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
TreeNode tnode = new TreeNode(tmp.Text);
}

}
}

B. Winform連接遠程資料庫

遠程連接有點復雜,首先要保證客戶端與SQL伺服器連接

步驟:
一 看ping 伺服器IP能否ping通。
這個實際上是看和遠程sql server 2000伺服器的物理連接是否存在。如果不行,請檢查網路,查 看配

置,當然得確保遠程sql server 2000伺服器的IP拼寫正確。

二 在Dos或命令行下輸入telnet 伺服器IP 埠,看能否連通。
如telnet 202.114.100.100 1433
通常埠值是1433,因為1433是sql server 2000的對於Tcp/IP的默認偵聽埠。如果有問題,通常這

一步會出問題。通常的提示是「……無法打開連接,連接 失敗"。
如果這一步有問題,應該檢查以下選項。
1 檢查遠程伺服器是否啟動了sql server 2000服務。如果沒有,則啟動。
2 檢查伺服器端有沒啟用Tcp/IP協議,因為遠程連接(通過網際網路)需要靠這個協檢查方法是,在服

務器上打開開始菜單->程序->Microsoft SQL Server->伺服器網路實用工具,看啟用的協議里

是否有tcp/ip協議,如果沒有,則啟用它。
3 檢查伺服器的tcp/ip埠是否配置為1433埠。仍然在伺服器網路實用工具里查看啟用協議裡面的

tcp/ip的屬性,確保默認埠為1433,並且隱藏伺服器復選框 沒有勾上。
事實上,如果默認埠被修改,也是可以的,但是在客戶端做telnet測試時,寫伺服器埠號時必須

與伺服器配置的埠號保持一致。如果隱藏伺服器復選框被勾 選,則意味著客戶端無法通過枚

舉伺服器來看到這台伺服器,起到了保護的作用, 但不影響連接,但是Tcp/ip協議的默認埠將被

隱式修改為2433,在客戶端連接 時必須作相應的改變。
4 如果伺服器端操作系統打過sp2補丁,則要對windows防火牆作一定的配置,要對它開放1433埠,

通常在測試時可以直接關掉windows防火牆(其他的防火牆也 關掉最好)。
5 檢查伺服器是否在1433埠偵聽。如果伺服器沒有在tcp連接的1433埠偵聽,則是連接不上的。檢

查方法是在伺服器的dos或命令行下面輸入
netstat -a -n 或者是netstat -an,在結果列表裡看是否有類似 tcp 127.0.0.1 1433 listening

的項。如果沒有,則通常需要給sql server 2000打上至少sp3的補丁。其實在伺服器端啟動查詢分

析器,輸入 select @@version 執行後可以看到版本號,版本號在8.0.2039以下的都需要打補丁。
如果以上都沒問題,這時你再做telnet 伺服器ip 1433 測試,將會看到屏幕一 閃之後游標在左上

角不停閃動。恭喜你,你馬上可以開始在企業管理器或查詢分析 器連接了。

三 檢查客戶端設置
程序->Microsoft SQL Server -> 客戶端網路使用工具。像在伺服器網路實用工具里一樣,確保客 戶端

tcp/ip協議啟用,並且默認埠為1433(或其他埠,與服 務器端保持一致就行)。

四 在企業管理器里或查詢那分析器連接測試
企業管理器->右鍵SQlserver組->新建sqlserver注冊->下一步->寫入遠程IP-> 下一步->選Sqlserver登陸-

>下一步->寫入登陸名與密碼(sa,password)->下一 步->下一步->完成 查詢分析器->文件->連接->寫

入遠程IP->寫入登錄名和密碼(sa,password)->確 定
通常建議在查詢分析器里做,因為默認情況下,通過企業管理器注冊另外一台SQL Server的超時設置

是4秒,而查詢分析器是15秒。
修改默認連接超時的方法:
企業管理器->工具->選項->在彈出的"SQL Server企業管理器屬性"窗口中,點擊"高級"選項卡->連接設

置->在登錄超時(秒) 後面的框里輸入一個較大的數字
查詢分析器->工具->選項->連接->在登錄超時(秒) 後面的框里輸入一個較大的數 字
通常就可以連通了,如果提示錯誤,則進入下一步。

五 錯誤產生的原因通常是由於SQL Server使用了"僅 Windows"的身份驗證方式,因 此用戶無法使 用

SQL Server的登錄帳戶(如 sa )進行連接。解決方法如下所示:
1 在伺服器端使用企業管理器,並且選擇"使用 Windows 身份驗證"連接上 SQL Server。
2 展開"SQL Server組",滑鼠右鍵點擊SQL Server伺服器的名稱,選擇"屬性",再選擇"安全性"選項卡。
3 在"身份驗證"下,選擇"SQL Server和 Windows "。
4 重新啟動SQL Server服務。(在dos或命令行下面net stop mssqlserver停止服務, net start mssqlserver啟

動服務,也是一種快捷的方法)。

附註:在連接本地伺服器時,通常使用的是命名管道協議(在伺服器網路實用工具里可以看到啟用的

協議有這個),默認埠是445,因此在本地能連通是不能說明什麼問題的,連接遠程伺服器是完全

不同的協議)

//如果是在遠程連接sql2000,採用下面連接字元串

// string source = "database=Northwind;Server=192.168.1.181,1433;User ID=sa;Password=sa;Persist Security Info=True";

C. C#winform遠程連接sql資料庫

c#
連接資料庫的方式
winform和webform是一樣的
sqlconnection conn=new sqlconnection("server=資料庫伺服器地址;database=資料庫名稱;uid=sa;pwd=密碼;");
//添加、修改、刪除 更換sql即可
string sql="insert into tablename(欄位1,欄位2)values(值1,值2)";
sqlcommand cmd=new sqlcommand(sql,conn);
conn.open();
cmd.executenonquery();
conn.close();
//查詢
sql="select * from tablename";
sqldataadapter da=new sqldataadapter(sql,conn);
datatable dt=new datatable();
conn.open();
da.fill(dt);
conn.close();

D. C#Winform、遠程連接資料庫問題!

首先要配置資料庫,開啟資料庫的遠程訪問功能。具體的配置方法網上很多,網路就有。
然後更改資料庫連接字元串為:"data
source=
ip地址;initial
catalog=
資料庫名稱";user
id=帳號;password=密碼"

E. C# winform訪問oracle資料庫失敗,

這個OleDB組件如果是ado.net自帶那個就不行。要oracle官網下載的才行。

F. C#winform程序如何在一台電腦上訪問另一台電腦上的資料庫

  1. 修改鏈接字元串,將其中的Server=源資料庫IP

  2. 資料庫所在的伺服器上,在防火牆中,添加1433埠,允許tcp訪問。

G. winform不能訪問sql資料庫

你好,你是想問winform不能訪問sql資料庫是怎麼回事嗎?winform不能訪問sql資料庫是因為你的網路出現故障,導致winform無法對sql資料庫進行正常的遠程連接,所以才會出現winform不能訪問sql資料庫的情況。你只要更換一個正常的網路,將winform與sql資料庫進行遠程連接,這樣就可以正常訪問sql資料庫了。

H. winform怎樣連接資料庫

lianglin999(重樓)等級:#9樓 得分:8回復於:2010-03-28 21:25:32 使用SqlConnection類連接資料庫

//需要添加如下的命名空間
using System.Data.SqlClient;

protected void Button1_Click(object sender, EventArgs e)
{
//ConnectionString定義了連接字元串
string ConnectionString = "Data Source=. ; Initial Catalog=Pubs; User ID=sa";
//使用連接字元串構造一個SqlConnection實例
SqlConnection conn = new SqlConnection(ConnectionString);
try
{
//打開連接
conn.Open();
//如果當前狀態打開,在控制台輸出
if (conn.State == ConnectionState.Open)
{
Label1.Text = "當前資料庫已經連接!<br/>";
Label1.Text += "連接字元串為:" + conn.ConnectionString;
}
}
catch (SqlException ex)
{
Label1.Text = "當前資料庫已經失敗!<br/>";
Label1.Text += "失敗的原因是:" + ex.Message;
}
finally
{
//調用Close方法即使關閉連接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}

I. .net winform怎麼連接mysql

方法/步驟1

  • 先從左側的工具欄拖進控制項Button和RichTextBox。

J. winform如何連接資料庫

如需連接到本地SQL,請確保SQL服務正常啟動,然後執行如下代碼:
string con, sql;
/*Integrated Security=SSPI 這個表示以當前WINDOWS系統用戶身去登錄SQL SERVER伺服器,如果SQL SERVER伺服器不支持這種方式登錄時,就會出錯。
你可以使用SQL SERVER的用戶名和密碼進行登錄,如:
"Server=.;Database=YouDBName;User ID=sa;Password=密碼"
*/
con = "Server=.;Database=YouDBName;Integrated Security=SSPI";
sql = "select * from Test";
SqlConnection mycon = new SqlConnection(con);
mycon.Open();
SqlDataAdapter myda = new SqlDataAdapter(sql, con);
DataSet myds = new DataSet();
myda.Fill(myds, "Test");
dataGridView1.DataSource = myds.Tables["Test"];