让我们说我查询数据库并加载项目列表.然后我打开详细视图表单中的一个项目,而不是从数据库中重新查询该项目,我从列表中的数据源创建项目的实例.
有没有办法可以更新数据库记录而无需获取单个项目的记录?
以下是我现在正在做的一个示例:
dataItem itemToUpdate = (from t in dataEntity.items
where t.id == id
select t).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
然后在拉动记录后,我更新项目中的一些值并将记录推回:
itemToUpdate.itemstatus = newStatus;
dataEntity.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我认为有更好的方法可以做到这一点,任何想法?
我使用Entity Framework 4.2并希望调用具有输入参数的存储过程.我正在使用Database.ExecuteSqlCommand调用存储过程.
但是,为了正确映射参数,文档缺少正确的调用语法.我的google-foo让我失望,任何帮助都将受到赞赏.
即我有一个程序
procedure SetElementFrequency
@ElementTypeID integer,
@Frequency float
as ...
Run Code Online (Sandbox Code Playgroud)
我试过用它来试试
Database.ExecuteSqlCommand("exec SetElementFrequency @p0 @p1",
elementType, frequency);
Run Code Online (Sandbox Code Playgroud)
和
Database.ExecuteSqlCommand("exec SetElementFrequency {0} {1}",
elementType, frequency);
Run Code Online (Sandbox Code Playgroud)
但他们都失败了错误语法'@ p1'附近的错误语法.
我正在尝试使用Alter LOGIN更新现有SQL登录的密码
我知道以下工作
ALTER LOGIN [username1] WITH PASSWORD = 'somenewpassword123';
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用局部变量时
DECLARE @newpass nvarchar(max);
SET @newpass = 'P@ssw0rd12345';
ALTER LOGIN [username1] WITH PASSWORD = @newpass;
Run Code Online (Sandbox Code Playgroud)
这失败了.向变量中添加[]括号似乎在SSMS查询编辑器中解决了这个问题,但是在C#中使用此编程方式写出查询它失败,因为上述语句具有相同的错误(PASSWORD语法错误)
c#app中的代码
public static int UpdateSqlLoginPassword(DbContext context, string loginName, string password)
{
try
{
string updatePassword =
@" SET NOCOUNT ON
DECLARE @loginName AS nvarchar(max) = {0}
DECLARE @password AS nvarchar(max) = {1}
EXEC('
USE master
ALTER LOGIN ['+ @loginName + '] WITH PASSWORD = ['+ @password + ']
')";
return context.Database.ExecuteSqlCommand(updatePassword, loginName, password);
} …Run Code Online (Sandbox Code Playgroud) 我在这做错了什么?
...
using (var ctx = ObjectContextManager<MyDataContext>.GetManager("MyDataContext"))
{
var idsToUpdate = "2,3";
var parameters = new[]
{
new SqlParameter("DesiredEndDate", SqlDbType.DateTime).Value = newUpperLimit,
new SqlParameter("TasksToUpdate", SqlDbType.NVarChar).Value = idsToUpdate
};
ctx.ObjectContext.ExecuteStoreCommand("UPDATE dbo.Tasks SET DesiredEndDate = @DesiredEndDate WHERE Id IN (SELECT Id FROM dbo.fn_Split(@TasksToUpdate, N','))", parameters);
ctx.ObjectContext.SaveChanges();
}
...
Run Code Online (Sandbox Code Playgroud)
我收到了错误
必须声明标量变量"@DesiredEndDate".
必须声明标量变量"@TasksToUpdate".
但我看不出我的代码有什么问题:/