我有一个DataGridViewWindows窗体应用程序的控件(用C#编写).
我需要的是:当用户选择DataGridViewRow,然后单击"删除"按钮时,应该删除该行,接下来,需要使用表适配器更新数据库.
这是我到目前为止:
private void btnDelete_Click(object sender, EventArgs e)
{
if (this.dataGridView1.SelectedRows.Count > 0)
{
dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,这只删除一行.我希望用户可以选择多行.
所以我上周有这个工作.至少,我以为我做到了! DataGridView更新
然后我今天再次开始研究这个项目并且正在进行中
在传递带有已修改行的DataRow集合时,Update需要有效的UpdateCommand.
上
scDB.SSIS_Configurations_StagingDataTable table = (scDB.SSIS_Configurations_StagingDataTable)stagingGrid.DataSource;
myStagingTableAdapter.Update(table);
Run Code Online (Sandbox Code Playgroud)
在StagingTableAdapter具有一个附加的查询这需要"过滤器"作为参数.那是用来填补DataGridView.在创建该查询的向导中,我看到"生成了更新".我发现大多数有此错误的帖子都要求使用命令构建器生成更新语句.我该怎么办?
我有DataSet一个DataTable是正确填写一个单一的DataRow通过TableAdapter.
我可以使用以下代码从DataRow中提取数据:
dataFileID = (int)this.dataFileDataRow["DataFileID"];
dataFileName = (string)this.dataFileDataRow["DataFileName"];
dataFileDate = (DateTime)this.dataFileDataRow["DataFileDate"];
Run Code Online (Sandbox Code Playgroud)
我有另一个名为DataFile的列varbinary(max).
当我尝试从DataRow上面提取该列的数据时,我什么都没得到.
byte[] fileFromDatabase = (byte[])this.dataFileDataRow["DataFile"];
Run Code Online (Sandbox Code Playgroud)
如果我在这个位置放置一个断点,我可以查看dataFileDataRow,查看ItemArray属性,看看二进制数据是否位于ItemArray中的位置5.
我已尝试使用其索引直接访问ItemArray,但字节数组未被复制到fileFromDatabase变量.
我还注意到将fileFromDatabase添加到我的手表会产生以下错误:
"名称'fileFromDatabase'在当前上下文中不存在"
执行仍然与fileFromDatabase的定义在同一个块中,所以我不明白它是如何脱离上下文的.
我将Visual Studio的配置设置为Release而不是Debug.这导致我在尝试检查fileFromDatabase时没有看到我正在寻找的实时调试信息.从Release转换到Debug后,我现在可以在手表中看到变量,并且可以验证上面的代码是否正常工作.
我越来越
无法启用约束.一行或多行包含违反非null,唯一或外键约束的值.
对于我的表适配器中的以下查询.
select
f.id, f.name, p.productid, p.masterproductID, f.productid, f.dateCreated, f.retired, p.code as HTML_DisplayName, p.ThumbnailID, p.code
from FormSaveData f
inner join Products p on (f.productid = p.ProductID or f.productId = p.MasterProductID)
where f.userId = 130559
and (p.b_IsArchived = 0 and p.b_IsRetired=0 and p.b_IsStaged = 0)
Run Code Online (Sandbox Code Playgroud)
当我自己运行查询时,它工作正常,其他userIds也可以正常工作,所以这是一个非常特殊的情况.我把它缩小到我内心加入的事实
f.productid = p.ProductID **or** f.productId = p.MasterProductID
我相信在某些罕见的情况下,这会导致表适配器不喜欢的某种冲突.对于表适配器和SQL,我几乎是一个新手,因此任何关于如何更好地编写它或为什么会发生这种情况的建议都将非常感激.
FormSaveData表中没有任何约束,键或特殊规则设置.
C#VS 2010 .net v4.0
我将DataSet添加到我的项目(类库)中,当我尝试添加TableAdapter时,我添加到Settings的连接字符串无法选择.我有其他数据源(来自服务器资源管理器)的连接字符串可用.我无法使用解决方法,我需要从Settings中提取连接字符串.我在许多其他项目中做同样的事情,它通常有效,但有时候我只做随机事情,直到我终于看到我的连接字符串.我希望升级到vs2010能解决这个问题.希望有人见过这个并且可以提供帮助,谢谢.
我有一个查询,我希望通过ASP.NET TableAdapter运行,该表包含一个'IN'子句,它通过参数接收它的值.
我的问题是,如何指定此参数?我想写这样的条件语句:
AND b.group_category_id in (@ParamList)
Run Code Online (Sandbox Code Playgroud)
其中@ParamList是参数的字符串,例如"4,12,45,23",但由于指定的id是Integer,它会抱怨它无法将String转换为Integer.这是有道理的,但有没有办法在ASP.NET TableAdapter的SQL语句中指定这样的列表?
当我执行插入时TableAdapter:
int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "",
totalprice, amountpaid);
Run Code Online (Sandbox Code Playgroud)
它返回115时返回错误的id .
如何获得正确的ID?
好像我正在与一个顽抗的VS2008 DataSet设计师作战.我一直在尝试做一个简单的2表数据集解决方案,其中一个表只是存储在另一个表中的整数值的文本含义.基本数据设计101.
Table1
CharField1
CharField2
IntForeignKeyField1
etc
Table2
IntPrimaryKey1
ValueForKeyField
Run Code Online (Sandbox Code Playgroud)
这并没有真正影响我遇到的问题,我不相信,因为我不想做任何事情,只是从第二个表中读取值,所以我可以在客户端的DataGridViewComboBoxColumn中选择它们 - 我会永远不要在客户端上编辑它们.但是,我离题了.
由于它存在于Web服务中,并且我希望将一个强类型数据集传递给此Web服务的客户端,因此我决定使用DataSet Designer来构建TableAdapter和所有管道,认为它可能不那么有用,也更容易保持.
因此,我创建了漂亮的框并编辑了select语句,指示设计者为表适配器创建所有Insert,Update和Delete命令.它很高兴地告诉我,一切都按照我的要求完成了.
但是,当我尝试使用Update语句时,我收到一条错误消息,指出没有有效的Update语句!在对网络上有类似问题的人进行一些徒劳无功的搜索之后,我挖掘了数据集的XML.果然,没有Update语句,也没有Delete语句.
我尝试从项目中完全删除并重新创建DataSet,结果相同.未创建更新或删除语句,即使报告已完成.
我最后通过检查来自另一个项目的另一个设计数据集手动构建Update语句XML,因此Web服务现在正在运行.但是,我没有任何信心,我的更改将持续通过设计师发起的编辑,我很难过为什么它不起作用.有任何想法吗?
感谢任何反馈,戴夫
我有一个分层应用程序.数据层使用包含tableadapter的数据集调用数据库.在数据库表中有一个名为ID的字段UniqueIdentifier.然后我创建以下查询:
select * from tbl where ID=@ID
Run Code Online (Sandbox Code Playgroud)
当我尝试在数据集设计器中预览结果时,我收到错误"无法将参数值从字符串转换为guid".
我尝试在传入的值周围添加单引号,但没有用.
我哪里错了?
假设我们有存储过程执行这样的简单操作:
CREATE PROCEDURE [dbo].[AddNewAuthorReturnID]
(
@Author_Name VARCHAR(MAX),
@Author_ID int OUTPUT
)
AS
SET NOCOUNT OFF;
BEGIN
INSERT INTO AUTHORS (@Author_Name)
VALUES (@Author_Name)
SET @Author_ID = SCOPE_IDENTITY()
SELECT @Author_ID
END
Run Code Online (Sandbox Code Playgroud)
在上面的过程中,返回的id是操作成功的标志。
考虑等价于DELETE。
CREATE PROCEDURE [dbo].[DeleteAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
DELETE FROM AUTHORS
WHERE
(Author_ID = @Author_ID)
END
Run Code Online (Sandbox Code Playgroud)
AUTHORS如果我们使用上述程序,我们如何知道操作成功并且记录已成功删除?