2017-07-19 151 views
0

我想查询数据库并让它使用用户传入我的Web API上的获取请求的数据返回正确的数据。从C#查询SQL Server数据库

我已经尝试使用:

SqlConnection con = new SqlConnection(conString); 
con.Open(); 

if (con.State == System.Data.ConnectionState.Open) 
{ 
    SqlCommand cmd = new SqlCommand(); 
} 

不过,我不确定我需要什么的放在命令。我只是写这样的事情:

WHERE forename, surname, caseid, postcode, telephone, email FROM TestDB.crm-data 

还是我误会了?

这是完整的代码对不起

public string Get(string forename, string surname, int? caseid, int? loanid, string postcode, string telephone, string email, string title) 
{ 
    SqlConnection con = new SqlConnection(conString); 
    con.Open(); 

    if (con.State == System.Data.ConnectionState.Open) 
    { 
     SqlCommand cmd = new SqlCommand("SELECT * FROM crm-base WHERE forename"); 
    } 
} 
+1

'WHERE姓,名,caseid,邮编,电话,电子邮件FROM TestDB.crm-data'?你的意思是'SELECT姓,姓,caseid,邮编,电话,电子邮件FROM TestDB.crm-data'? –

+0

你错过了某些元素之前“WHERE” –

+0

@EmanuelPirovano我的意思是,应该去什么sqlcommand() –

回答

2

这是不完美的,但在这里你去。您已完成其中的一部分:

using(SqlConnection con = new SqlConnection(conString)) 
{ 
    con.Open(); 

    var [email protected]"Select forename, surname, caseid, postcode, telephone, email 
       FROM TestDB.crm-data WHERE [email protected] OR [email protected]"; 

    using(SqlCommand cmd = new SqlCommand(query, con)) 
    { 
     cmd.Parameters.Add("@caseid",SqlDbType.Int).Value=1234; 
     cmd.Parameters.Add("@email", SqlDbType.VarChar, 250).Value="[email protected]"; 
     var dtb=new DataTable(); 
     var da=new SqlDataAdapter(com); 
     da.Fill(dtb) 
     //NOW dtb CONTAINS RECORDS FROM YOUR QUERY 
    } 
} 
+0

所以我可以做返回dtb? –

+0

@andywilson是的,你可以返回数据表。但请使用更新的方法添加参数。 – TheVillageIdiot

+0

@marc_s你会用什么来代替addwithvalue是否有一个简短的内联方式? –

0

你可以使用原始查询,如果查询具有恒定的参数。但是,如果您传递参数的不同值(在where子句中) - 请使用SQLParameters。这些是为防止SQL注入攻击而构建的。

看看这个链接的一些例子。

http://csharp-station.com/Tutorial/AdoDotNet/Lesson06

+0

我将如何做到这一点与多个参数,并通过获取请求传入,因为它不告诉我我怎么样需要能够做到这一点,告诉我如何使用本地参数 –

+1

你应该在你的答案中包含一些代码来说明链接文章/博客文章/小提琴等的主要点。 – TheVillageIdiot

-1

您的查询不完整。您在不指定条件的情况下添加了where子句。

你需要做类似的事情;

SqlCommand cmd = new SqlCommand($"SELECT * FROM crm-base WHERE forename='{forename}'); 

这将抓取所有记录,forename等于传入get方法的记录。

+1

不要使用字符串连接 - 使用**显式参数** - 避免SQL注入攻击!** –