为什么我的 SqlParameter 没有被识别?
Why is my SqlParameter not being recognised?
我收到这个错误:
System.Data.SqlClient.SqlException: 'The parameterized query '(@inputKarakterSoort varchar(8000))SELECT TOP 2 * FROM Karakter ' expects the parameter '@inputKarakterSoort', which was not supplied.
不过我好像给了参数化查询
我的 DAL:
public class SortedKarakterContext : ISortedKarakterContext
{
public string conn { get; set; }
public SortedKarakterContext()
{
this.conn = "MYCONNECTIONSTRING";
}
private SqlConnection GetConnection()
{
return new SqlConnection(conn);
}
public IEnumerable<KarakterDTO> GetSortedKarakters(string inputKarakterSoort)//User input was not supplied?? Hoe veranderen
{
using (SqlConnection connection = GetConnection())
{
connection.Open();
var command = new SqlCommand("SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = @inputKarakterSoort ORDER BY NEWID();", connection);
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
var reader = command.ExecuteReader();
var sortedKarakters = new List<KarakterDTO>();
while (reader.Read())
{
var karakter = new KarakterDTO
{
KarakterId = (int)reader["KarakterId"],
KarakterSoort = reader["KarakterSoort"]?.ToString(),
KarakterNaam = reader["KarakterNaam"]?.ToString()
};
sortedKarakters.Add(karakter);
}
return sortedKarakters;
}
}
}
}
我以为我是在这一行做的:
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
我确定 inputKaraktersoort 有一个值,因为当我在那里放置一个断点时,它说它有正确的值。
错误在这一行:
var reader = command.ExecuteReader();
谁能帮帮我?
根据请求的命令值和inputKarakterSoort:
当我键入此内容时:
inputKarakterSoort = "Defensive"
以上:connection.Open()
它确实有效,但我想在我的查询中使用我的参数。
我尝试了sgmoore的评论并实现了它。现在可以使用了。
现在这是我的 DAL:
public class SortedKarakterContext : ISortedKarakterContext
{
public string conn { get; set; }
public SortedKarakterContext()
{
this.conn = "MYCONNECTIONSTRING";
}
private SqlConnection GetConnection()
{
return new SqlConnection(conn);
}
public IEnumerable<KarakterDTO> GetSortedKarakters(string inputKarakterSoort)
{
using (SqlConnection connection = GetConnection())
{
connection.Open();
var command = new SqlCommand("SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = @inputKarakterSoort ORDER BY NEWID();", connection);
if (inputKarakterSoort == null)
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = DBNull.Value;
else
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
var reader = command.ExecuteReader();
var sortedKarakters = new List<KarakterDTO>();
while (reader.Read())
{
var karakter = new KarakterDTO
{
KarakterId = (int)reader["KarakterId"],
KarakterSoort = reader["KarakterSoort"]?.ToString(),
KarakterNaam = reader["KarakterNaam"]?.ToString()
};
sortedKarakters.Add(karakter);
}
return sortedKarakters;
}
}
}
}
改为使用
var command = new SqlCommand($"SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = {inputKarakterSoort} ORDER BY NEWID();", connection);
我收到这个错误:
System.Data.SqlClient.SqlException: 'The parameterized query '(@inputKarakterSoort varchar(8000))SELECT TOP 2 * FROM Karakter ' expects the parameter '@inputKarakterSoort', which was not supplied.
不过我好像给了参数化查询
我的 DAL:
public class SortedKarakterContext : ISortedKarakterContext
{
public string conn { get; set; }
public SortedKarakterContext()
{
this.conn = "MYCONNECTIONSTRING";
}
private SqlConnection GetConnection()
{
return new SqlConnection(conn);
}
public IEnumerable<KarakterDTO> GetSortedKarakters(string inputKarakterSoort)//User input was not supplied?? Hoe veranderen
{
using (SqlConnection connection = GetConnection())
{
connection.Open();
var command = new SqlCommand("SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = @inputKarakterSoort ORDER BY NEWID();", connection);
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
var reader = command.ExecuteReader();
var sortedKarakters = new List<KarakterDTO>();
while (reader.Read())
{
var karakter = new KarakterDTO
{
KarakterId = (int)reader["KarakterId"],
KarakterSoort = reader["KarakterSoort"]?.ToString(),
KarakterNaam = reader["KarakterNaam"]?.ToString()
};
sortedKarakters.Add(karakter);
}
return sortedKarakters;
}
}
}
}
我以为我是在这一行做的:
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
我确定 inputKaraktersoort 有一个值,因为当我在那里放置一个断点时,它说它有正确的值。
错误在这一行:
var reader = command.ExecuteReader();
谁能帮帮我?
根据请求的命令值和inputKarakterSoort:
当我键入此内容时:
inputKarakterSoort = "Defensive"
以上:connection.Open()
它确实有效,但我想在我的查询中使用我的参数。
我尝试了sgmoore的评论并实现了它。现在可以使用了。
现在这是我的 DAL:
public class SortedKarakterContext : ISortedKarakterContext
{
public string conn { get; set; }
public SortedKarakterContext()
{
this.conn = "MYCONNECTIONSTRING";
}
private SqlConnection GetConnection()
{
return new SqlConnection(conn);
}
public IEnumerable<KarakterDTO> GetSortedKarakters(string inputKarakterSoort)
{
using (SqlConnection connection = GetConnection())
{
connection.Open();
var command = new SqlCommand("SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = @inputKarakterSoort ORDER BY NEWID();", connection);
if (inputKarakterSoort == null)
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = DBNull.Value;
else
command.Parameters.Add("@inputKarakterSoort", SqlDbType.VarChar).Value = inputKarakterSoort;
var reader = command.ExecuteReader();
var sortedKarakters = new List<KarakterDTO>();
while (reader.Read())
{
var karakter = new KarakterDTO
{
KarakterId = (int)reader["KarakterId"],
KarakterSoort = reader["KarakterSoort"]?.ToString(),
KarakterNaam = reader["KarakterNaam"]?.ToString()
};
sortedKarakters.Add(karakter);
}
return sortedKarakters;
}
}
}
}
改为使用
var command = new SqlCommand($"SELECT TOP 2 * FROM Karakter WHERE KarakterSoort = {inputKarakterSoort} ORDER BY NEWID();", connection);