Код: Выделить всё
public static FormattableString FromSqlSQLParamDynamic(string storedProcedure, string[] paramName, params object?[] parameters)
{
if (paramName.Length != parameters.Length)
{
throw new ArgumentException("Parameters count mismatch.");
}
SqlParameter[] sqlParameterparam = [.. paramName.Select((name, i) =>
new SqlParameter(name, parameters[i] ?? DBNull.Value)
)];
FormattableString sqlQuery = $"EXEC {storedProcedure} {string.Join(", ", sqlParameterparam.Select(p => p))}"; // EXEC myStoredProcedure id, random_text, key
return sqlQuery;
}
< /code>
Я сделал инициализацию sqlparameterparam < /code> правильно, но, к сожалению, я не могу интерполировать его с «exec {stordedProcedure}» < /code>, и это создает эту ошибку: < /p>
Нездорованное исключение возникало при обработке. Преобразование типа данных NVARCHAR в Int.
microsoft.data.sqlclient.sqlcommand++< >C.B__211_0(task
Результат) < /p>
< /blockquot Динамически. < /p>
Однако заменив: < /p>
FormattableString sqlQuery = $"EXEC {storedProcedure} {string.Join(", ", sqlParameterparam.Select(p => p))}";
< /code>
С этой строкой кода вместо этого работает нормально на моем конце: < /p>
FormattableString sqlQuery = $"EXEC {storedProcedure} {sqlParameterparam[0]}, {sqlParameterparam[1]}, {sqlParameterparam[2]}";
Код: Выделить всё
using Microsoft.EntityFrameworkCore;
using MyProject.Models.SQLServer;
using MyProject.Data.SQLServer;
class SQLServerHelper(SQLServerContext context)
{
private readonly SQLServerContext _context = context;
public async Task GetRandTextsFromSqlROAsync(string storedProcedure, params object?[] parameters)
{
string[] paramNames = ["id", "random_text", "key"];
if (parameters.Length != paramNames.Length)
{
throw new ArgumentException("Parameters count mismatch.");
}
var sqlParam = SQLDbSettings.FromSqlSQLParamDynamic(storedProcedure, paramNames, parameters);
return await _context.RandText
.FromSql(sqlParam)
.AsNoTracking()
.ToListAsync();
}
}
@page "/sql_server/crud/randtext"
@rendermode InteractiveServer
@using Microsoft.EntityFrameworkCore
@using MyProject.Models.SQLServer
@using MyProject.Data.SQLServer
@implements IAsyncDisposable
@inject IDbContextFactory DbFactory
@code {
private SQLServerContext context = default!;
private List randText = new();
protected override async Task OnInitializedAsync()
{
context = DbFactory.CreateDbContext();
var sQLServerHelper = new SQLServerHelper(context);
randText = await sQLServerHelper.GetRandTextsFromSqlROAsync("myStoredProcedure", null, null, "SEE_RECORDS");
}
public async ValueTask DisposeAsync()
{
await context.DisposeAsync();
}
}
< /code>
Также обратите внимание, что я использую SQL Server для этого экземпляра. < /p>
CREATE PROCEDURE myStoredProcedure
@id INT,
@random_text VARCHAR(50),
@key VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @successful VARCHAR(20) = 'SUCCESSFUL';
IF @key = 'SEE_RECORDS'
BEGIN
SELECT
RandText.id
,RandText.random_text
,RandText.dt_stamp
FROM
myDB.dbo.myTable AS RandText
WHERE RandText.disable = 0
ORDER BY RandText.dt_stamp DESC
END
ELSE
BEGIN
SELECT CONCAT('@key parameter value: ', '''', @key, '''', ' cannot be found.') SP_OUTPUT
END
END
< /code>
Для тех, кто путает с моей задачей, ознакомьтесь с этими ссылками: < /p>
(SQL-запросы) Передача параметров, которые я буду цитировать: < /li>
< /ul>
"langire =" langride = "raTride =" langrIde = "rAtride ="var user = new SqlParameter("user", "johndoe");
var blogs = await context.Blogs
.FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}")
.ToListAsync();
< /code>
примечание < /h4>
Параметры, которые вы передаете, должны точно соответствовать определению сохраненной процедуры
. Обратите особое внимание на упорядочение параметров,
, чтобы не пропустить и не упустить ни одного из них - или рассмотрите возможность использования
именованных параметров. Кроме того, убедитесь, что типы параметров
соответствуют, и что их аспекты (размер, точность, масштаб) установлены как
need.
< /blockquote>
веб -приложение Blazor с использованием .NET 9: SQLDBSETTINGS PAMITICE < /li>
< /ul>
reaized!>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -dynamical