SqlDataReader에서 데이터 읽기
SQL Server 2008 데이터베이스가 있으며 백엔드에서 작업 중입니다.asp.net/C#에서 작업하고 있습니다.
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//how do I read strings here????
}
나는 독자가 가치를 가지고 있다는 것을 안다.내 SQL 명령은 테이블에서 열을 하나만 선택하는 것입니다.열에는 문자열만 포함됩니다.나는 독자의 줄을 하나씩 읽고 싶다.이거 어떻게 해?
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var myString = rdr.GetString(0); //The 0 stands for "the 0'th column", so the first column of the result.
// Do somthing with this rows string, for example to put them in to a list
listDeclaredElsewhere.Add(myString);
}
}
string col1Value = rdr["ColumnOneName"].ToString();
또는
string col1Value = rdr[0].ToString();
이것들은objects, 그러니까 캐스팅을 하거나.ToString().
데이터베이스에서 반환된 시작 열의 이름을 입력합니다."ColumnName"스트링일 경우 를 사용할 수 있습니다..ToString()다른 타입의 경우는, 다음의 방법으로 변환할 필요가 있습니다.System.Convert.
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string column = rdr["ColumnName"].ToString();
int columnValue = Convert.ToInt32(rdr["ColumnName"]);
}
while(rdr.Read())
{
string col=rdr["colName"].ToString();
}
효과가 있을 것이다
도우미 방법을 사용할 수 있는 사람에게 공유하려고 합니다.
public static class Sql
{
public static T Read<T>(DbDataReader DataReader, string FieldName)
{
int FieldIndex;
try { FieldIndex = DataReader.GetOrdinal(FieldName); }
catch { return default(T); }
if (DataReader.IsDBNull(FieldIndex))
{
return default(T);
}
else
{
object readData = DataReader.GetValue(FieldIndex);
if (readData is T)
{
return (T)readData;
}
else
{
try
{
return (T)Convert.ChangeType(readData, typeof(T));
}
catch (InvalidCastException)
{
return default(T);
}
}
}
}
}
사용방법:
cmd.CommandText = @"SELECT DISTINCT [SoftwareCode00], [MachineID]
FROM [CM_S01].[dbo].[INSTALLED_SOFTWARE_DATA]";
using (SqlDataReader data = cmd.ExecuteReader())
{
while (data.Read())
{
usedBy.Add(
Sql.Read<String>(data, "SoftwareCode00"),
Sql.Read<Int32>(data, "MachineID"));
}
}
도우미 메서드는 원하는 값으로 캐스트할 수 없거나 데이터베이스 값이 NULL이면 결과가 NULL이 됩니다.
단일 결과:
if (reader.Read())
{
Response.Write(reader[0].ToString());
Response.Write(reader[1].ToString());
}
결과가 여러 개인 경우:
while (reader.Read())
{
Response.Write(reader[0].ToString());
Response.Write(reader[1].ToString());
}
오래된 내용인 것은 알지만 SqlDataReader의 내용을 클래스로 읽는다면 매우 편리할 것입니다.독자와 클래스의 열 이름은 같아야 합니다.
public static List<T> Fill<T>(this SqlDataReader reader) where T : new()
{
List<T> res = new List<T>();
while (reader.Read())
{
T t = new T();
for (int inc = 0; inc < reader.FieldCount; inc++)
{
Type type = t.GetType();
string name = reader.GetName(inc);
PropertyInfo prop = type.GetProperty(name);
if (prop != null)
{
if (name == prop.Name)
{
var value = reader.GetValue(inc);
if (value != DBNull.Value)
{
prop.SetValue(t, Convert.ChangeType(value, prop.PropertyType), null);
}
//prop.SetValue(t, value, null);
}
}
}
res.Add(t);
}
reader.Close();
return res;
}
나는 그것을 사용하는 것에 반대한다.SqlDataReader여기, ADO.NET에는 많은 엣지 케이스와 복잡성이 있으며, 제 경험상 ADO는 가장 수동으로 작성되었습니다.NET 코드는 적어도1가지 방법(통상, 미묘한 문맥상)으로 분할되어 있습니다.
이를 방지하기 위한 도구가 존재합니다.예를 들어, 이 경우 문자열 열을 읽으려고 합니다.Dapper는 이 문제를 완벽하게 해결합니다.
var region = ... // some filter
var vals = connection.Query<string>(
"select Name from Table where Region=@region", // query
new { region } // parameters
).AsList();
여기서 Dapper는 모든 파라미터화, 실행 및 행 처리와 ADO의 기타 많은 세부사항을 다루고 있습니다.NET.<string>로 대체할 수 있다<SomeType>전체 행을 개체로 구체화합니다.
사실, 내가 이걸 할 수 있다는 걸 스스로 깨달았어
while (rdr.read())
{
string str = rdr.GetValue().ToString().Trim();
}
가장 간단한 말로, 쿼리가 column_name을 반환하고 문자열이 포함된 경우:
while (rdr.Read())
{
string yourString = rdr.getString("column_name")
}
나는 보통 데이터 리더로 데이터를 읽는다. 단지 작은 예를 추가했을 뿐이다.
string connectionString = "Data Source=DESKTOP-2EV7CF4;Initial Catalog=TestDB;User ID=sa;Password=tintin11#";
string queryString = "Select * from EMP";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(queryString, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
}
reader.Close();
}
}
해야 한다read database column여기. 다음 코드 조각들을 볼 수 있습니다.
string connectionString = ConfigurationManager.ConnectionStrings["NameOfYourSqlConnectionString"].ConnectionString;
using (var _connection = new SqlConnection(connectionString))
{
_connection.Open();
using (SqlCommand command = new SqlCommand("SELECT SomeColumnName FROM TableName", _connection))
{
SqlDataReader sqlDataReader = command.ExecuteReader();
if (sqlDataReader.HasRows)
{
while (sqlDataReader.Read())
{
string YourFirstDataBaseTableColumn = sqlDataReader["SomeColumn"].ToString(); // Remember Type Casting is required here it has to be according to database column data type
string YourSecondDataBaseTableColumn = sqlDataReader["SomeColumn"].ToString();
string YourThridDataBaseTableColumn = sqlDataReader["SomeColumn"].ToString();
}
}
sqlDataReader.Close();
}
_connection.Close();
다음과 같은 도우미 기능이 있습니다.
public static string GetString(object o)
{
if (o == DBNull.Value)
return "";
return o.ToString();
}
문자열을 추출할 때 사용합니다.
tbUserName.Text = GetString(reader["UserName"]);
언급URL : https://stackoverflow.com/questions/4018114/read-data-from-sqldatareader
'programing' 카테고리의 다른 글
| TextBlock 텍스트가 트리밍되고 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.04.21 |
|---|---|
| azure 웹 앱 요청 시간 초과 증가 (0) | 2023.04.21 |
| IP 주소가 'XXX'인 Windows Azure Client.XXX.XX.XX.XX'는 서버에 액세스할 수 없습니다. (0) | 2023.04.21 |
| 선택한 셀의 배경색 반환 (0) | 2023.04.21 |
| 데이터 프레임 문자열 열을 여러 열로 분할 (0) | 2023.04.21 |