我正在使用Dapper来处理sql数据库.我的网站项目中有一些搜索逻辑.
我的搜索获取字符串参数列表.
//filter is list of strings
var sql = new StringBuilder();
sql.Append("SELECT LibraryDocumentId FROM LibraryDocumentKeywords WHERE ");
sql.Append(string.Join("OR ", filter.Select(f => string.Format("LOWER(Keyword) LIKE '%{0}%'", f)).ToList()));
var isList = conn.Query<int>(sql.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)
实际上我不想使用这种生成动态SQL查询的方法,因为Dapper会缓存每一个查询.我宁愿通过参数传递过滤器.有人可以帮助我吗?任何的想法 ?
我有一个用 dapper 创建数据库的代码:
public static bool CreateDatabase(string connectionString, string databaseName)
{
const string DATABASE_CREATE_QUERY = "CREATE DATABASE (@databaseName)";
using (var connection = new SqlConnection(connectionString))
{
var affectedRows = connection.Execute(DATABASE_CREATE_QUERY, new { databaseName });
return affectedRows > 0 ? true : false;
}
}
CreateDatabase("Server=10.10.10.10;User ID=user;Password=password;MultipleActiveResultSets=true;", "TEST_DB");
Run Code Online (Sandbox Code Playgroud)
每次运行此方法时,都会出现错误:
“(”附近的语法不正确。
有踪迹:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject …Run Code Online (Sandbox Code Playgroud) 我使用返回的参数来显示bin的重量.
这是我的SQL Server存储过程;
ALTER PROCEDURE [dbo].[SumScrapBinWeight]
@ScrapBinNumber INT,
@ScrapBinWeightSUM DECIMAL(8,2) OUTPUT
AS
BEGIN
SELECT @ScrapBinWeightSUM = SUM(CalculatedWeightLbs)
FROM ScrapData
WHERE ScrapBinNumber = @ScrapBinNumber
END
Run Code Online (Sandbox Code Playgroud)
这在SSMS中工作并返回预期值,当我在C#应用程序中调用它时,我收到错误
施放无效
在最后一行.这让我感到困惑,如果我Decimal改为Int,它不会抛出错误,但它不会显示我想要显示的小数.
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MfgDataCollector"].ToString()))
{
DynamicParameters param = new DynamicParameters();
param.Add("@ScrapBinNumber", lbl_TicketNumber.Text);
param.Add("@ScrapBinWeightSUM", dbType: DbType.Int32, direction: ParameterDirection.Output);
conn.Execute("SumScrapBinWeight", param, commandType: CommandType.StoredProcedure);
lbl_BinWeight.Text = param.Get<decimal>("@ScrapBinWeightSUM").ToString();
}
Run Code Online (Sandbox Code Playgroud)
我在哪里错了?
我在 C# 中有这个任务,我想使用 dapper 在 MySql 中调用存储过程。
public async Task<List<StatItemListViewModel>> GetTable()
{
using (MySqlConnection connection = new MySqlConnection(Helper.CnnVal("SampleDB")))
{
var results =await connection.QueryAsync<List<StatItemListViewModel>>("Call MainResult_Statistic(@sDate, @eDate)", new { sDate = "2018-11-01", eDate = "2018-11-30" });
return results.FirstOrDefault();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是它不返回任何东西。
有人能帮助我吗?
我在Visual Studio 2017中创建了一个新的项目空白Web应用程序。然后,我使用sqlserver创建数据库,并尝试使用dapper。我写了一个方法我在行中出错
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString))
{
return Ok(db.Query<Employee>
("Select * From ergaz").ToList());
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个web.config gile来放置代码
<connectionStrings>
<add name="myConnectionString" connectionString="Data Source=aaaaaaa\SQLEXPRESS;Initial Catalog=APIDB;Integrated Security=True;" />
Run Code Online (Sandbox Code Playgroud)
但ConfigurationManager一词带有红色下划线并表示
使用通用类型'configurationmanager T'需要1个类型参数
我已经使用了System.Configuration。我搜索在解决方案中添加程序集引用,但是当我尝试添加它时,弹出窗口为空。 屏幕截图
我是 .netcore 的新手,并尝试使用 dapper 进行一些数据库交互。dapper 不能与 .net core 3 一起使用吗?或者我做错了什么:X
我创建了一个新的.net项目:
dotnet new mvc
Run Code Online (Sandbox Code Playgroud)
尝试添加短小精悍
dotnet add package Dapper --version 2.0.30
Run Code Online (Sandbox Code Playgroud)
然后我得到错误:
info : Adding PackageReference for package 'Dapper' into project
C:\repos\dapper\dapper.csproj'.
info : Restoring packages for C:\repos\dapper\dapper.csproj...
error: Cycle detected.
error: dapper -> Dapper (>= 2.0.30).
info : Package 'Dapper' is compatible with all the specified frameworks in project 'C:\repos\dapper\dapper.csproj'.
error: Value cannot be null. (Parameter 'path1')
Run Code Online (Sandbox Code Playgroud) 我正在使用 Dapper 将我的代码连接到我的 LocalDB。我有很多其他函数可以完美地访问信息,可以读取它并将其带入我的程序,但由于某种原因,我将信息插入数据库的函数没有做任何事情。我已经确认没有抛出异常,并且在单击按钮时到达代码(如消息框所示),但没有任何数据保存到数据库中。我还检查了我的查询,当我直接查询数据库时它工作正常,只是当我出于某种原因让代码执行它时(因此是我的问题)。出了什么问题?
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using System.Configuration;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace ProjectManager
{
class Database
{
// Connection Variables
private IDbConnection connection = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
// Get Number of Projects
public int GetNumOfProjects()
{
return connection.Query<int>("select count(*) from Projects").FirstOrDefault();
}
// Load Projects
public ProjectPane LoadProjects(int i, Point start)
{
// Variables
string title;
string subject;
int progress;
// Load ProjectPane with Information
title …Run Code Online (Sandbox Code Playgroud) 我正在使用 Dapper,并且编写了一个存储过程,用于插入一行并返回标识值。
使用Dapper,我想捕获这个标识值,但结果作为动态类型返回,我不知道如何访问这个id。
我的存储过程:
CREATE PROCEDURE USER_INSERT
(@name varchar(30),
@job varchar(30))
AS
BEGIN
INSERT INTO User (name, job)
VALUES (@name, @job)
SELECT SCOPE_IDENTITY()
END
Run Code Online (Sandbox Code Playgroud)
C#代码:
public async Task<int> InsertTest()
{
using (var connection = new SqlConnection("myconnectionstring"))
{
string SP_INSERT = "USER_INSERT";
var parameters = new { name = "Jon", job = "developer" };
var insert = await connection.QueryAsync(SP_INSERT, parameters, commandType: CommandType.StoredProcedure);
var resultInsert = insert.SingleOrDefault();
}
return 0; //only for test
}
Run Code Online (Sandbox Code Playgroud)
查询结果截图,如何访问我的id字段?
根据Tim Corey 的ASP.NET 和dapper 教程,我采用了一个通用函数来将数据存储在 SQL Server 数据库中,以返回所存储对象的 ID:
public async Task<T> SaveData<T, U>(
string storedProcedure,
U parameters,
string connectionId = "DefaultDataConnection")
{
using IDbConnection connection = new SqlConnection(_configuration.GetConnectionString(connectionId));
T ID = await connection.ExecuteScalarAsync<T>(storedProcedure, parameters, commandType: CommandType.StoredProcedure);
return ID;
}
Run Code Online (Sandbox Code Playgroud)
问题如下:在教程的原始代码中,可以在不声明泛型参数类型的情况下调用该方法。然而,对于附加的泛型返回类型,这是没有必要的。问题是,这些方法通常是用匿名类型对象调用的,我不知道如何调用该方法:
// this is within the insert method of my class, which is responsible for handling the images table:
int insertedID = await _db.SaveData<int, ????>("dbo.spImage_Insert", new { image.UserID, image.FileName, image.UploadDate });
Run Code Online (Sandbox Code Playgroud)
应该怎样做呢?我是否必须使用显式类型而不是匿名对象?
编辑:返回值是通用的,因为 ID 可以是 …
dapper ×10
c# ×8
sql-server ×4
.net ×2
.net-core ×1
asp.net-mvc ×1
automapper ×1
generics ×1
identity ×1
mysql ×1
sql ×1
ssms ×1