Также:
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}
или:
public static string ByteArrayToString(byte[] ba)
{
return BitConverter.ToString(ba).Replace("-","");
}
существует еще больше вариантов выполнения его, например здесь .
обратная конверсия пошла бы как это:
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
Используя Substring
наилучший вариант в сочетании с Convert.ToByte
. См. этот ответ для получения дополнительной информации. При необходимости в лучшей производительности необходимо избежать Convert.ToByte
, прежде чем можно будет отбросить SubString
.
Этот запрос должен делать то, что вы ищете.
SELECT
s1.Id, s1.Name, s1.Parent, s2.Id as Child, MAX(s2.Mark) as Mark, m.Ranking
FROM
Students s1
INNER JOIN Students s2 ON (s1.id = s2.parent AND s2.Mark >= 20)
LEFT JOIN Marks m ON (s1.name = m.name)
GROUP BY
s1.Id, s1.Name, s1.Parent, Child, Ranking;
1.
select * from Students S1
join Students S2 on(S1.Id=S2.StudentId)
2.
Вам нужно уточнить, какой из двух экземпляров учеников вы имеете в виду здесь в каждом из двух случаев - S1 или S2? Когда вы выражаете свое (домашнее задание?) Задание, оно в каждом случае на 100% неоднозначно. Может быть , где S1.Mark> = 20 и S1.Mark = (выберите max (s3.mark) из учеников s3
и т. Д. И т. Д., Или многие другие варианты.
снова двусмысленность относительно того, какой экземпляр учеников вы имеете в виду, в любом случае вам просто нужно изменить выбор и добавить одно соединение:
выберите Marks.Ranking from Студенты S1 присоединиться к студентам S2 на (S1.Id = S2.StudentId) присоедините Marks к (S1.Name = Marks.Name)
и where
, как и раньше.