对于stackoverflow.com 的Dapper Micro ORM的结果我印象非常深刻.我正在考虑我的新项目,但我有一个担心,有时我的项目需要有存储过程,我在网上搜索了很多但没有找到存储过程的任何东西.那么有没有办法让Dapper使用存储过程?
如果可能,请告诉我,否则我必须以我的方式延长它.
Dapper如何帮助防止SQL注入?我正在测试不同的DAL技术,必须选择一个来保护我们的网站.我倾向于Dapper(http://code.google.com/p/dapper-dot-net/),但需要一些帮助来学习安全性.
是的,这里和这里有关于如何使用dapper-dot-net插入记录的问题.然而,答案虽然提供了丰富的信息,但似乎并未将我指向正确的方向.情况如下:将数据从SqlServer移动到MySql.将记录读入一个IEnumerable<WTUser>很容易,但我只是没有在插入上得到一些东西.首先,'移动记录代码':
// moving data
Dim session As New Session(DataProvider.MSSql, "server", _
"database")
Dim resources As List(Of WTUser) = session.QueryReader(Of WTUser)("select * from tbl_resource")
session = New Session(DataProvider.MySql, "server", "database", _
"user", "p@$$w0rd")
// *edit* - corrected parameter notation with '@'
Dim strInsert = "INSERT INTO tbl_resource (ResourceName, ResourceRate, ResourceTypeID, ActiveYN) " & _
"VALUES (@ResourceName, @ResourceRate, @ResourceType, @ActiveYN)"
Dim recordCount = session.WriteData(Of WTUser)(strInsert, resources)
// session Methods
Public Function QueryReader(Of TEntity As …Run Code Online (Sandbox Code Playgroud) 我有一个表有一个由两列组成的主键,这两列都没有自动递增,我的Dapper插入(Dapper Extensions的一部分)在插件上失败,说两列中的第一列不允许为null ,即使我传入的值也不是空的.
表Student:
StudentId (PK, not null) \_ (combined to form primary key)
StudentName (PK, not null) /
Active -- just another column
Run Code Online (Sandbox Code Playgroud)
C#:
public class Student {
public int StudentId { get; set; }
public string StudentName { get; set; }
public bool Active { get; set; }
}
var newStudent = new Student { StudentId = 5, StudentName = "Joe", Active = true };
var insertSuccess = myConn.Insert<Student>(newStudent);
Run Code Online (Sandbox Code Playgroud)
错误:
无法将值NULL插入列'StudentId',表'dbo.Student'; 列不允许空值.INSERT失败.
Dapper由于某种原因没有获得StudentId值为5.我是否必须为具有组合PK的表或具有不 …
我在 Windows C# 表单应用程序中使用 Dapper。我注意到他们的大部分 CRUD 操作都以类名作为参数。例如下面的两个表:
"Employee" Table
Column Name | Data Type |
-------------------------
EmpName | string |
EmpNo | string |
--------------------------
Employee.cs
[Table("Employee")]
public class Employee
{
[Key]
public string EmpNo {get;set;}
public string EmpName {get;set;}
}
"User" Table
Column Name | Data Type |
-------------------------
UserName | string |
UserNo | string |
--------------------------
User.cs
[Table("User")]
public class User
{
[Key]
public string UserNo {get;set;}
public string UserName {get;set;}
}
eg. var users= connection.Query<User>("select * …Run Code Online (Sandbox Code Playgroud) 我已经读过这样连接SQL字符串是个坏主意:
cmd.CommandText = "Insert INTO workers Values (" + User.Identity.Name + "," + WorkerName.Text + "," + GetUniqueWorkerKey() + ");";
Run Code Online (Sandbox Code Playgroud)
所以推荐的方法是:
cmd.CommandText = "Insert INTO workers Values (@Username, @WorkerName, @WorkerKey)";
cmd.Parameters.AddWithValue("@Username", User.Identity.Name);
cmd.Paramters.AddWithValue("@WorkerName", TheWorkerNameYouPassedToThisMethod);
Run Code Online (Sandbox Code Playgroud)
自从我读到它以来,我一直在避免连接SQL字符串,但我从未真正知道不这样做的理由.这个AddWithValue()方法最终不会在场景后面进行相同的字符串连接吗?
也许该方法剥离特殊字符并将字符转换为html实体以防止sql注入,但我可以在连接我的SQL之前完成所有这些,我也得到相同的效果,不是吗?或者是否有其他原因不练习SQL的字符串连接?
我正在尝试重新编写一些代码以使用 Dapper,以便我可以轻松使用参数。我正在尝试在 Oracle 数据库上执行 UPDATE 语句。要更新的列表IDs作为参数传入List<int>。我想为每个IDs传入的字段更新一个字段。以下是我所拥有的:
OracleConnection connection = ... // set earlier
public int IncreaseProcessCount(List<int> ids)
{
var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN @ids", new { ids });
return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)
在使用 Dapper 之前,执行语句运行得很好。现在我收到以下错误:
ORA-00936: 缺少表达式。
我当前的解决方案基于以下帖子: