我想使用DataAdapter填充DataGridView控件.但我不知道怎么做,因为我正在使用带参数的存储过程.有人能引用一个例子吗?
adapter.notifyDataSetInvalidated()方法完成了什么?没有关于它的文档.
我试图重新加载ListView和notifyDataSetChanged或notifyDataSetInvalidated似乎没有完成任何事情.
鉴于以下代码,我有一些关于最佳实践的问题:
string connectionString = @"Server=(local)\sqlexpress; Database=master; Integrated Security=true;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from information_schema.columns", connection))
{
await connection.OpenAsync();
DataTable dataTable = new DataTable();
await Task.Run(() => dataAdapter.Fill(dataTable));
return dataTable;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到几个示例在Task.Run()调用中包装整个代码块,但我不确定这是否比仅为DataAdapter.Fill()方法调用Task.Run()更好更灵活和特定(仅使用等待异步任务).
在Fill()方法上调用Task.Run()的方法比包装整个代码块更好吗?
在Task.Run()中调用Fill()有任何负面的副作用吗?如果Fill()有错误,我正在考虑丢失调用堆栈和/或异常信息的问题.
有没有更好的方法在ASP.NET中编写它?
我确信有一个非常简单的原因,这一行不起作用,但它已经回避了过去一周,所以我希望别人会注意到我的错.
我已经在这个项目上工作了几个星期到一个月.我一直在使用旧的DataAdapter,CommandBuiler等与1个数据库上的一些linq到sql编码的混合,具有多个Windows应用程序表单.此特定表单使用DataAdapter,Dataset和Command Builder从数据库编辑或删除行.它一直工作正常,直到我切换电脑.现在数据集正在更新,但数据库不是.
以下是此表单的完整代码:
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Exit Cook Book?", "Exit?", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
Application.Exit();
}
}
private void goBackToolStripMenuItem_Click(object sender, EventArgs e)
{
AddRecipe goBack = new AddRecipe();
Close();
goBack.Show();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Scan through the Cook Book to find recipes that you wish to edit or delete.", "Help!");
}
SqlConnection con;
SqlDataAdapter dataAdapt;
DataSet dataRecipe;
SqlCommandBuilder cb;
int MaxRows = 0;
int inc = 0;
private void …
Run Code Online (Sandbox Code Playgroud) 哪个会更快.
1)循环datareader并基于填充的数据表创建自定义行和列
2)或者创建一个dataAdapter对象并且只是(填充)一个数据表.
在动态创建数据表时,数据加载器的性能是否仍然适用?
我使用Fill从SQL获取数据到Dataset.它只是一个包含两列的表(CategoryId(int)和CategoryName(varchar)).
当我在填充方法后查看我的数据集时,CategoryId列似乎是正确的.但在CategoryName中我有一个System.Data.StrongTypingExceptio n.
这意味着什么?
有任何想法吗?
这两种方法有什么区别吗?两者都返回一个打开的SQLiteDatabase.如果不存在,则两者都可以创建数据库.当需要读/写时,SQLiteOpenHelper也有getWriteableDatabase ...
我应该使用哪种方法?基于我见过的示例代码,我首先使用SQLiteOpenHelper创建我的数据库,但在需要使用数据库时调用SQLiteDatabase.openDatabase.
如果我用DataTable填充DataTable,DataAdapter.Fill(DataTable);
然后用这样简单的东西对DataTable中的行进行更改:DataTable.Rows[0]["Name"] = "New Name";
如何轻松地将这些更改保存回数据库?我以为我可以打电话DataAdapter.Update(DataTable);
但我读过它只适用于TableAdapter(?).
我从许多地方读过,可以使用DataAdapter使用多个表填充DataSet.它也没有说明单个Update调用是否可以更新DataSet中的所有表.
有人可以帮我弄清楚如何做到这一点?
似乎除了在第二次填充之前更改DataAdapter上的SelectCommand的示例之外,没有任何(我尝试在线查找)示例.但我觉得这种方法违背了DataAdapter的目的.
从我的数据来看,也许单个DataAdapter只能处理单个数据库表,而Update只能在该表上运行.因此,多表DataSet将要求各自的DataAdapter调用其Update以完全更新DataSet.是这样的吗?
最后,外键关系和约束会自动保存在DataSet(级联删除,级联更新)中吗?
也许链接到示例或教程可能会有所帮助.非常感谢!
我尝试在C#.net中使用DataAdapter.我仍然不了解DataAdapter.
我阅读了很多关于DataAdapter和DataReader的文章和博客.
我了解DataAdapter会在需要时自动打开和关闭数据库.
但,
//conn.Open();
AdsDataAdapter da;
da = new AdsDataAdapter("Select * from Test", conn);
AdsCommandBuilder cb;
cb = new AdsCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "Test");
DataRow newrow = ds.Tables["Test"].NewRow();
newrow["Name"] = "How about";
ds.Tables["Test"].Rows.Add(newrow);
da.Update(ds, "Test");
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我收到一条错误消息,提示"连接必须打开".
为什么适配器无法自动打开连接?
并且,我想使用insertCommand插入数据(对于此测试,我打开了连接).
da.InsertCommand = new AdsCommand("INSERT INTO test (NAME) values('Insert Test #1')", conn);
//da.InsertCommand.ExecuteNonQuery(); // it works
da.Update(ds,"Test"); //but it does not works.
Run Code Online (Sandbox Code Playgroud)
很多例子使用Adapter.Update(),但对我来说,它不起作用:(
没有错误,也没有插入.
并使用da.InsertCommand.ExecuteNonQuery(); 而不是Update(),它的工作原理.
我究竟做错了什么?
谢谢!
dataadapter ×10
c# ×7
ado.net ×2
android ×2
dataset ×2
datatable ×2
.net ×1
asp.net ×1
asynchronous ×1
database ×1
datareader ×1
performance ×1
sql ×1
sqlite ×1