我有两种方法。当我调用玻璃方法时,我需要在查询中插入值。如何在查询中插入方法的值?
我正在使用MVC,C#和SQL Server。
我尝试的代码:在此方法中调用方法glas
RController re = new RController();
re.Glas(C_E);
string insert = "INSERT INTO dbo.MEP (R1) VALUES (@code)";
using (SqlCommand command = new SqlCommand(insert, con))
{
command.Parameters.AddWithValue("@code", "HERE METHOD GLAS");
con.Open();
int result = command.ExecuteNonQuery();
}
方法GLAS返回一个字符串。该字符串是我需要在查询中插入的字符串。该查询位于另一个控制器方法(Rcontroller)中。
public void GLAS(string C_E)
{
// more code
if (i > 0)
{
string glas1 = "OK";
}
else
{
string glas1 = "Fail";
}
}
答案 0 :(得分:1)
您当前的方法是void
,并且不返回任何值。您可以通过ref传递值,也可以只是将方法更改为返回值:
public string GLAS(string C_E)
{
//more code
string glas1 = "OK";
if (i > 0)
{
glas1 = "OK";
}
else
{
glas1 = "Fail";
}
return glas1;
}
然后您可以像使用它一样
command.Parameters.AddWithValue("@code", GLAS(C_E));
此外,建议不要使用.AddWithValue
,而应使用Parameters.Add()
,例如:
command.Parameters.Add("@code", SqlDbType.VarChar).Value = GLAS(C_E);
答案 1 :(得分:0)
要详细说明这个主题,您有几种选择。其中一些已经详细说明。存在以下方法Add
,AddWithValue
和整个参数集合。这提供了灵活性,但您也提到要返回一个值。
因此,要处理初始参数方面。
添加:您定义参数,SQL中的类型和值。这样可以减轻潜在的数据库推断问题。您传递的值是整数,但SQL认为该值应为所定义的十进制。
AddWithValue:SQL将自动推断类型,只需传递一个值和参数即可。
参数集合:您可以预先定义所有参数,然后只需将其传递给SqlCommand
。
一个示例方法是:
公共类DatabaseContext:IDbRepository { 私有只读字符串dbConnection;
public DatabaseContext(IConfiguration configuration) => dbConnection = configuration.GetConnectionString("dbConnection");
public bool Insert(string query, params SqlParameter[] parameters)
{
// If no parameters, then you really are not inserting. Handle exception.
using(var connection = new SqlConnection(dbConnection))
using(var command = new SqlCommand(connection, query))
{
connection.Open();
command.Parameters.AddRange(parameters);
return (command.ExecuteNonQuery() > 0);
}
}
因此,从本质上讲,您将调用上下文,传递查询,参数,然后执行查询。但是您可以返回布尔值,而不是有条件的检查来分配成功或失败。打电话时,您会知道它成功了,因此您可以传回有效的状态码,即HttpStatusCode.Ok
。
但是您也可以在工厂包装,或者在进行交互时稍微清洁一下方法。希望这会有所帮助。